T-SQL计算具有特定值的行(在一个查询中多个)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了T-SQL计算具有特定值的行(在一个查询中多个)相关的知识,希望对你有一定的参考价值。
我需要一些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
我想得到一个结果:
IGrp | V1High | V2High
######################
A | 1 | 2
B | 2 | 1
在我看来,这应该与这个表达一致
SELECT IGrp, COUNT(Value1>1) AS V1High, COUNT(Value2>1) AS V2High
FROM Tbl GROUP BY IGrp
但是这在T-SQL中是不可能的,因为Count()不采用布尔值。那么它真的是用WHERE Value>1
和COUNT(*)
进行多个查询并且之后加入它们的唯一可行方法吗?还是有诀窍来达到预期的效果?
提前致谢。
答案
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
另一答案
您可以使用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
另一答案
利用case when
将为你工作
SELECT IGrp,
sum(case when isnull(Value1,0)>1 then 1 else 0 end) AS V1High,
sum(case when isnull(Value2,0)>1 then 1 else 0 end) AS V2High
FROM Tbl GROUP BY IGrp
另一答案
SELECT IGrp,
COUNT(CASE WHEN Value1 = 'Foo' THEN 1 ELSE NULL END) AS Tot_Foo,
COUNT(CASE WHEN Value1 = 'Blah' THEN 1 ELSE NULL END) AS Tot_Blah
FROM Tbl
GROUP BY IGrp
这也可用于比较同一字段的2个不同值,如上所示进行微小更改。
非常有助于验证应该以1:1的比例存在的值。
另一答案
你可以在COUNT()函数中放入一个CASE .. WHEN ..语句,当条件成立时返回1,否则返回NULL。
以上是关于T-SQL计算具有特定值的行(在一个查询中多个)的主要内容,如果未能解决你的问题,请参考以下文章