使用GROUP BY和SUM查找记录集

时间:2013-05-09 18:54:25

标签: sql group-by aggregate-functions

我想对每个GroupID(总是成对出现)进行查询,其中两个条目的值都为HasData的值。

|GroupID | HasData |
|--------|---------|
|  1     |  1      |
|  1     |  1      |
|  2     |  0      |
|  2     |  1      |
|  3     |  0      |
|  3     |  0      |
|  4     |  1      |
|  4     |  1      |

结果将是:

1
4

这就是我正在尝试的,但我似乎无法做到正确。每当我在GroupID上执行GROUP BY时,我只能访问选择器

中的那个
SELECT GroupID
FROM Table
GROUP BY GroupID, HasData
HAVING SUM(HasData) = 2 

但是我收到以下错误消息,因为HasData实际上有点:

Operand data type bit is invalid for sum operator.

我可以在两个记录都为真的情况下计算两个吗?

3 个答案:

答案 0 :(得分:3)

只需排除那些具有HasData = 0记录的组ID。

select distinct a.groupID
from table1 a 
where not exists(select * from table1 b where b.HasData = 0 and b.groupID = a.groupID)

答案 1 :(得分:1)

您可以使用having子句检查所有值是否为1:

select GroupId
from table
group by GroupId
having sum(cast(HasData as int)) = 2

也就是说,只需从HasData列中删除group by列,然后检查它。

答案 2 :(得分:1)

还有一个选择

SELECT GroupID
FROM table
WHERE HasData <> 0
GROUP BY GroupID
HAVING COUNT(*) > 1