帮助t-sql数据聚合

sta*_*ser 0 sql t-sql sql-server sql-server-2008

基于下表

Area  S1 S2 S3 S4 
--------------------
A1    5  10 20 0
A2    11 19 15 20
A3    0  0  0  20
Run Code Online (Sandbox Code Playgroud)

我想生成一个输出,它将给出不具有"0"的列数.

所以输出就是

Area  S1 S2 S3 S4   Count 
-------------------------
A1    5  10 20 0    3
A2    11 19 15 20   4
A3    0  0  0  20   1
Run Code Online (Sandbox Code Playgroud)

And*_*mar 6

一种方法是将case语句的结果添加到一起:

select area, s1, s2, s3, s4,
    case when S1 <> 0 then 1 else 0 end +
    case when S2 <> 0 then 1 else 0 end +
    case when S3 <> 0 then 1 else 0 end +
    case when S4 <> 0 then 1 else 0 end as Count
from YourTable
Run Code Online (Sandbox Code Playgroud)