You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server按优先级过滤:同id存在Source B时排除Source A

正确SQL实现方案

你的原SQL逻辑错误,它会只保留存在B的id对应的A记录,这和需求完全相反,所以结果不符合预期。以下是几种符合需求的实现方式:

方法1:窗口函数(推荐,支持多Source类型扩展)

通过给每个id下的记录按优先级排序(B优先于A),然后取每个id的第一条记录:

SELECT id, Source
FROM (
    SELECT 
        id, 
        Source,
        -- 给B标记为1,A标记为2,按id分组排序后取第一条
        ROW_NUMBER() OVER (PARTITION BY id ORDER BY CASE WHEN Source = 'B' THEN 1 ELSE 2 END) AS rn
    FROM t
) AS sub_query
WHERE rn = 1

方法2:NOT EXISTS 逻辑筛选

直接按需求拆分条件:要么是B记录,要么是A记录且该id不存在B记录:

SELECT id, Source
FROM t a
WHERE 
    Source = 'B'
    OR (Source = 'A' AND NOT EXISTS (SELECT 1 FROM t b WHERE b.id = a.id AND b.Source = 'B'))

方法3:GROUP BY 聚合(仅适用于只有A、B两种Source的场景)

利用B的ASCII码大于A的特性,用MAX函数直接取每个id的最高优先级Source:

SELECT id, MAX(Source) AS Source
FROM t
GROUP BY id

内容的提问来源于stack exchange,提问作者Marieta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:52:13