我需要一些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>1和COUNT(*)事后加入他们的行列?还是有诀窍来达到预期的效果?
提前致谢.
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)
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)