繁体   English   中英

使用GROUP BY和SUM查找记录集

[英]Finding records sets with GROUP BY and SUM

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

|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.

如果两个记录都为真,我可以算两个吗?

只排除具有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)

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

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

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

另一种选择

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM