Tsql 具有特定值的T-SQL计数行(一次查询中有多个)

Tsql 具有特定值的T-SQL计数行(一次查询中有多个),tsql,count,Tsql,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

我需要一些关于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(*)
执行多个查询并随后将它们连接起来的唯一可能的方法吗?还是有一个技巧可以达到预期的效果


提前谢谢。

你可以放一个箱子。。什么时候COUNT()函数中的语句,当条件保持时返回1,否则返回NULL。

当对您有用时,请使用
case

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 

您可以使用
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 
这也可用于比较同一字段的两个不同值,如上图所示有细微变化

非常有助于验证以1:1比率存在的值。

您还可以使用:

select
count(nullif(field > minvalue,false))

谢谢,不知怎么的,我没想到这个。这行不通。所有非空值都包含在计数中。这不是我的意思。您的
CASE
语句返回
1
0
,这意味着
计数在任何一种情况下都是递增的。当您不希望计数递增时,
CASE
语句应返回
NULL
。这不起作用。所有非空值都包含在计数中。@HoseynHeydari否,请检查编辑,我已更正,示例现在已更正。根据我的经验,SQL Server可以很好地使用此命令。
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
select
count(nullif(field > minvalue,false))