1

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

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

所以结果是:

1
4

这就是我正在尝试的,但我似乎无法做到这一点。每当我GROUP BY对 GroupID 执行操作时,我只能在选择器中访问它

SELECT GroupID
FROM Table
GROUP BY GroupID, HasData
HAVING SUM(HasData) = 2 

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

Operand data type bit is invalid for sum operator.

如果两个记录都是真的,我可以数两个吗?

4

3 回答 3

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)
于 2013-05-09T19:23:47.283 回答
1

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

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

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

于 2013-05-09T18:57:56.420 回答
1

另一种选择

SELECT GroupID
FROM table
WHERE HasData <> 0
GROUP BY GroupID
HAVING COUNT(*) > 1
于 2013-05-09T19:28:17.813 回答