Estou lutando com uma declaração de caso que não está funcionando. Bastante simples, preciso fornecer um valor de 0 onde estão os pontos de interrogação. Tenho várias outras instruções case que lidam com colunas separadas, mas esta é a mais simples. Eu usei declarações case com NULLS antes e nenhum problema. Meu melhor palpite é que o OUTER APPLY está bagunçando as coisas, mas não consigo encontrar nenhuma documentação para comprovar isso.
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
Esta consulta produz este conjunto de resultados
NULL FY88
NULL FY10
NULL FY01
NULL FY99
NULL FY97
NULL FY99
NULL FY97
NULL FY02
NULL FY01
17525.00 FY85
NULL FY84
...
Qualquer ajuda para fazer a declaração de caso funcionar e explicação do problema ou uma refatoração seriam muito apreciadas.
O Outer Apply está funcionando como uma Left Outer Join, portanto, quando nenhuma linha é retornada pelo Outer Apply, uma linha preenchida com NULLs é retornada. Eu questionaria a necessidade do Outer Apply, mas colocar um Coalesce(GIVE_BACK1.CLUB_TOT,0) na lista SELECT resolveria o problema imediato.