【问题标题】:Selecting one vs all records within group in SQL Server在 SQL Server 中选择一个组内的所有记录
【发布时间】:2021-06-09 15:56:05
【问题描述】:

我在 SQL Server 中有一个类似这样的表(这些记录来自用户输入,稍后我必须将此表与业务表连接)

表 A

id group item
1 A 4567876
2 A 5678988
3 A 9999999
4 B 1234567
5 B 6846677

对于我要选择的每个组,如果项目 9999999 有任何条目,则仅选择此记录,否则选择相应组中的所有记录。 (例如,对于 A 组中的给定示例,选择项目 9999999 和 B 组中的所有项目)

id group item
3 A 9999999
4 B 1234567
5 B 6846677

我不想从表中删除任何记录。

【问题讨论】:

    标签: sql sql-server sql-server-2016


    【解决方案1】:

    你可以使用not exists:

    select a.*
    from a
    where a.item = 9999999 or
          not exists (select 1
                      from a a2
                      where a2.group = a.group and
                            a2.item = 9999999
                     );
    

    您还可以对rank() 使用花哨的技巧:

    select top (1) with ties t.*
    from t
    order by rank() over (partition by group
                          order by (case when item = 9999999 then 1 else 2 end)
                         );
    

    【讨论】:

    • 哇,它工作正常,这个表中的其他列也可以吗?实际上 9999999 代表业务表中的所有项目,我不需要任何过滤器。
    • @Rajput 。 . .请用适当的样本数据和解释提出一个新问题。我不完全理解您评论中的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多