我只需要Total return NULL如果所有值均为NULL

时间:2018-11-10 05:12:08

标签: sql sql-server tsql

类似这样的查询

      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 

但是它太长了,整个查询中有很多总数。 解决此问题的最佳方法是什么?

3 个答案:

答案 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