我正在为一个不起作用的案例陈述而苦苦挣扎。很简单,我需要在问号所在的位置提供 0 值。我还有其他几个处理单独列的案例语句,但这是最简单的。我之前使用过带有 NULLS 的 case 语句,没有问题。我最好的猜测是 OUTER APPLY 搞砸了,但我找不到任何文档来支持它。
SELECT TOP 20
GIVE_BACK1.CLUB_TOT 'B1_TOT',
GC.CLUB_USER_VARBL3
FROM
SUMMIT.CLUB_MBRSP GC
OUTER APPLY
(
SELECT
CASE
WHEN B1.CLUB_USER_VARBL3 IS NULL
THEN '?????????????????????????????'
ELSE
B1.CLUB_TOT
END AS 'CLUB_TOT'
FROM
SUMMIT.CLUB_MBRSP B1
WHERE
GC.ID = B1.ID
AND
(
(
GC.CLUB_USER_VARBL3 != 'LT'
AND B1.CLUB_USER_VARBL3 = LEFT(GC.CLUB_USER_VARBL3,2) + CONVERT(varchar(2),(CONVERT(INT,RIGHT(GC.CLUB_USER_VARBL3,3))-1))
)
)
) GIVE_BACK1
此查询产生此结果集
NULL FY88
NULL FY10
NULL FY01
NULL FY99
NULL FY97
NULL FY99
NULL FY97
NULL FY02
NULL FY01
17525.00 FY85
NULL FY84
...
任何有助于使案例陈述正常工作的帮助,以及对问题或重构的解释,将不胜感激。
Outer Apply 的工作方式与 Left Outer Join 类似,因此当 Outer Apply 未返回任何行时,将返回一个填充有 NULL 的行。我会质疑外部应用的必要性,但在 SELECT 列表中放置 Coalesce(GIVE_BACK1.CLUB_TOT,0) 将解决眼前的问题。