我有以下格式的一些行:
我想要一个 SQL 查询,它将按 EntityId 对上述行进行分组,并按以下方式聚合位列:
我知道我可以通过将 bit 列转换为 int 并使用 Min/Max 来做到这一点,但这感觉有点像黑客。我想我度过了缓慢的一天并且错过了明显的解决方案......
做这个的最好方式是什么?
我使用的是 SQL Server 2008 R2,不过最好使用通用的 SQL 方法。
更新:
上述行的预期结果集将是:
最佳答案
我认为转换到 int
可能是最好的整体,因为没有按位聚合,其他任何东西也将是“hacky”。
为了好玩,这应该可以在不强制转换位字段的情况下工作;
select
EntityId,
1 ^ count(distinct nullif(Submitted, 1)),
1 ^ count(distinct nullif(Reviewed, 1)),
count(distinct nullif(Query, 0))
from t
group by EntityId
关于SQL 将位列聚合为单个位结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22151600/