SQL 将位列聚合为单位结果

Ton*_*onE 6 sql sql-server sql-server-2008

我有一些采用以下格式的行:

在此输入图像描述

我想要一个 SQL 查询,它将按 EntityId 对上述行进行分组,并按以下方式聚合位列:

  • 已提交:如果给定 EntityId 的任何行为 0,则为 0,否则为 1
  • 已审核:如果给定 EntityId 的任何行为 0,则为 0,否则为 1
  • 查询:如果给定 EntityId 1 的任意行为 1,否则为 0

我知道我可以通过将位列转换为 int 并使用 Min/Max 来做到这一点,但这感觉有点像黑客。我认为我度过了缓慢的一天并且错过了明显的解决方案......

做这个的最好方式是什么?

我正在使用 SQL Server 2008 R2,尽管通用 SQL 方法是最好的。

更新:

上面的行所需的结果集是:

在此输入图像描述

Ale*_* K. 4

我认为int总体而言,转换为 an 可能是最好的,因为没有按位聚合,其他任何东西也将是“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
Run Code Online (Sandbox Code Playgroud)