我想对每个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.
我可以在两个记录都为真的情况下计算两个吗?
答案 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