T-SQL计算具有特定值的行(在一个查询中为多个)

Mar*_*rks 43 t-sql count

我需要一些T-SQL查询的帮助.我想计算具有特殊值的字段(例如> 1).

假设我有一个像这样的表:

IGrp | Item | Value1 | Value2
#############################
A    | I11  | 0.52   | 1.18
A    | I12  | 1.30   | 0.54
A    | I21  | 0.49   | 2.37
B    | I22  | 2.16   | 1.12
B    | I31  | 1.50   | 0.28
Run Code Online (Sandbox Code Playgroud)

我想得到一个结果:

IGrp | V1High | V2High 
######################
A    | 1      | 2
B    | 2      | 1
Run Code Online (Sandbox Code Playgroud)

在我看来,这应该与这个表达一致

SELECT IGrp, COUNT(Value1>1) AS V1High, COUNT(Value2>1) AS V2High
FROM Tbl GROUP BY IGrp
Run Code Online (Sandbox Code Playgroud)

但是这在T-SQL中是不可能的,因为Count()不采用布尔值.因此,它是真正的唯一可能的方式是与多个查询WHERE Value>1COUNT(*)事后加入他们的行列?还是有诀窍来达到预期的效果?

提前致谢.

Luk*_*keH 68

SELECT IGrp, 
    COUNT(CASE WHEN Value1 > 1 THEN 1 ELSE NULL END) AS V1High, 
    COUNT(CASE WHEN Value2 > 1 THEN 1 ELSE NULL END) AS V2High 
FROM Tbl
GROUP BY IGrp
Run Code Online (Sandbox Code Playgroud)

  • 根据我的经验,SQL Server可以很好地使用此命令. (2认同)

cjk*_*cjk 10

您可以使用以下CASE声明:

SELECT IGrp, 
    SUM(CASE WHEN Value1>1 THEN 1 ELSE 0 END) AS V1High, 
    SUM(CASE WHEN Value2>1 THEN 1 ELSE 0 END) AS V2High 
FROM Tbl GROUP BY IGrp 
Run Code Online (Sandbox Code Playgroud)

  • 这不行.所有非空值都包含在计数中. (2认同)