Sql-server – SUM several CASE results

casesql serversum

Given:

 CASE 
     WHEN A IS NULL THEN 1 ELSE 0
 END AS [A]
, CASE
     WHEN B IS NULL THEN 1 ELSE 0
 END AS [B]
, CASE
     WHEN C IS NULL THEN 1 ELSE 0 
 END AS [C]

How can I SUM A+B+C being the results of 3 different CASE WHEN

Best Answer

You did not specify your RDBMS (SQL Server, Oracle, etc.), but if it supports Common Table Expressions, you could encapsulate your main select logic in a CTE and select/sum from it. Here is a solution using SQL Server.

Declare @T table (A int, B int, C int)
insert into @T(A,B,C) values(null,2,null)

;WITH _cte
AS (
    SELECT CASE 
            WHEN A IS NULL
                THEN 1
            ELSE 0
            END AS [A]
        ,CASE 
            WHEN B IS NULL
                THEN 1
            ELSE 0
            END AS [B]
        ,CASE 
            WHEN C IS NULL
                THEN 1
            ELSE 0
            END AS [C]
    FROM @T
    )
SELECT A + B + C as Results
FROM _cte

Results
2

As a comment pointed out, you don't need a common table expression. A derived table will also serve the purpose

Declare @T table (A int, B int, C int)
insert into @T(A,B,C) values(null,2,null)
SELECT A + B + C AS Results
FROM (
    SELECT CASE 
            WHEN A IS NULL
                THEN 1
            ELSE 0
            END AS [A]
        ,CASE 
            WHEN B IS NULL
                THEN 1
            ELSE 0
            END AS [B]
        ,CASE 
            WHEN C IS NULL
                THEN 1
            ELSE 0
            END AS [C]
    FROM @T
    ) a