SQL 将位列聚合为单个位结果

标签 sql sql-server sql-server-2008

我有以下格式的一些行:

enter image description here

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

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

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

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

    我使用的是 SQL Server 2008 R2,不过最好使用通用的 SQL 方法。

    更新:

    上述行的预期结果集将是:

    enter image description here

    最佳答案

    我想转换到 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/

    相关文章:

    mysql - 仅选择最近的记录

    sql-server - 如何导入基于集合的语句中的联接表?

    sql - PostgreSQL WHERE IN LIKE 查询

    sql - 大查询结果是否总是有序的,即 : using OFFSET makes sense to skip rows?

    sql-server - 将用户添加到 SQL Server 中的服务器角色

    sql-server-2005 - 将 SQL 2005 应用程序移动到 SQL 2008

    sql-server-2008 - 用于超大型数据库的 SQL Azure

    sql - 使用 NULL 值更新 Select Join

    php - 尝试将SQL语句生成的JSON数据从PHP脚本返回到JS网页,却得到null

    sql - SQL如何修改XML中属性的首位?