计算有多少列具有特定值

rot*_*ana 4 sql sql-server

我有一个看起来像这样的表:

ID    x1    x2    x3    x4
1     20    30    0     0
2     60    0     0     0
3     10    30    0     0
4     30    30    30    30
Run Code Online (Sandbox Code Playgroud)

我希望能够查询这个并返回ID,其中包含大于0的列数作为该行中的值.所以结果看起来像这样:

ID    Count
1     2
2     1
3     2
4     4
Run Code Online (Sandbox Code Playgroud)

Raj*_*ore 5

试试这个:

Select 
    ID,
    Case When x1 <> 0 Then 1 Else 0 End + 
    Case When x2 <> 0 Then 1 Else 0 End + 
    Case When x3 <> 0 Then 1 Else 0 End + 
    Case When x4 <> 0 Then 1 Else 0 End as Count
From MyTable
Run Code Online (Sandbox Code Playgroud)

虽然这很容易编码,但是您拥有的列越多,您选择的列越多,您需要添加的列越多.


Gio*_*sos 5

试试这个:

SELECT ID, z.cnt
FROM mytable
CROSS APPLY (SELECT COUNT(*) AS cnt 
             FROM (VALUES (x1), (x2), (x3), (x4)) x(y)
             WHERE x.y > 0) z
Run Code Online (Sandbox Code Playgroud)

此查询使用表值构造函数来创建内联表,其是初始表的.COUNT在此内联表上执行a ,您可以获得大于零的列数.

我认为如果你有超过4列,这可以很好地扩展.

在这里演示