类似这样的查询
SELECT A,B,C,D, (A+B+C+D) as TOTAL
FROM TABLES
如果A,B,C和D为NULL。我需要返回NULL。 但是如果其中任何一个都不为NULL。其他将从NULL更改为零。 和总计(a + b + c + d)。
现在尝试这种方式
SELECT A,B,.. CASE WHEN (A IS NULL) AND (B IS NULL) AND ... THEN NULL
ELSE ISNULL(A,0) + ISNULL(B,NULL) +... END
但是它太长了,整个查询中有很多总数。 解决此问题的最佳方法是什么?
答案 0 :(得分:5)
所需的语义与SUM
提供的语义相同。
SELECT A,B,C,D,
(SELECT SUM(val)
FROM (VALUES(A),
(B),
(C),
(D)) T (val)) AS Total
FROM YourTable
答案 1 :(得分:3)
我会使用COALESCE
函数。
按顺序评估参数,并返回最初不评估为
NULL
的第一个表达式的当前值。
SELECT
CASE WHEN COALESCE(A,B,C,D) IS NOT NULL THEN
COALESCE(A,0 ) + COALESCE(B,0 )+ COALESCE(C,0 ) + COALESCE(D,0 )
END
FROM TABLES
答案 2 :(得分:2)
COALESCE()
是可以使用的功能:
SELECT A,B,..
CASE WHEN COALESCE(A,B,C,D) IS NULL THEN NULL ELSE ISNULL(A,0) + ISNULL(B,0) +... END