Несколько операторов SQL CASE возвращают 0 вместо NULL - PullRequest
2 голосов
/ 07 марта 2011

У меня есть следующий оператор SQL Case, который прекрасно работает, пока совпадают годы MF.Date & M.MemberCurrentYear. Будут сценарии, в которых годы не совпадают, и это возвращает баланс NULL. Я бы хотел вернуть ноль.

SELECT SUM(CASE WHEN Type = 1 THEN Amount ELSE Amount * - 1 END) AS Balance
FROM dbo.MemberFinancials AS MF 
INNER JOIN dbo.Members AS M ON MF.MemberID = M.MemberID 
  AND DATEPART(yyyy, MF.Date) = M.MemberCurrentYear 
INNER JOIN dbo.FinancialTypes AS FT ON MF.FinancialTypeID = FT.FinancialTypeID

Спасибо

Ответы [ 3 ]

5 голосов
/ 07 марта 2011
SELECT     

     ISNULL(SUM(CASE WHEN Type = 1 THEN Amount ELSE Amount * - 1 END),0) AS Balance
FROM         dbo.MemberFinancials AS MF INNER JOIN
                      dbo.Members AS M ON MF.MemberID = M.MemberID AND DATEPART(yyyy, MF.Date) = M.MemberCurrentYear INNER JOIN
                      dbo.FinancialTypes AS FT ON MF.FinancialTypeID = FT.FinancialTypeID

Используйте ISNULL (или COALESCE, если хотите ...)

3 голосов
/ 07 марта 2011
SELECT ISNULL( SUM(CASE WHEN Type = 1 THEN Amount ELSE Amount * - 1 END), 0) AS Balance
2 голосов
/ 07 марта 2011
SELECT
    COALESCE(
        SUM(CASE WHEN Type = 1 THEN Amount ELSE Amount * - 1 END)
    , 0) AS Balance
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...