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

SQL查询去重需求:保留GlobalOfferingLeadNm移除重复ManagerNm

解决SQL去重需求:优先保留高优先级FlairID的唯一EnterpriseId记录

看起来你需要处理的是优先级去重的问题——既要保证EnterpriseId列唯一,又要优先保留FlairID为1300(对应globalofferingleadnm)的记录,即使它和managernm同名,也要排除后者的记录。你的原查询用了UNION,但因为两个分支的FlairID不同,同名的EnterpriseId会生成两条记录,没法满足去重要求。

调整后的SQL查询

-- Set Variables
Declare @M1 as INT = 1300;
Declare @M2 as INT = 949;

WITH AllCandidateRecords AS (
    -- 第一部分:获取globalofferingleadnm对应的记录,赋予最高优先级FlairID
    SELECT 
        a.globalofferingleadnm AS EnterpriseID,
        @M1 AS FlairID
    FROM Offering_vw a 
    WHERE a.OfferingClassNm <> 'Asset Group' 
    GROUP BY a.GlobalOfferingLeadNm

    UNION ALL

    -- 第二部分:获取managernm对应的记录,赋予次优先级FlairID
    SELECT 
        a.ManagerNm AS EnterpriseID,
        @M2 AS FlairID
    FROM Offering_vw a 
    WHERE a.OfferingClassNm <> 'Asset Group' 
    GROUP BY a.ManagerNm
)
-- 对每个EnterpriseID,只保留FlairID最高的那条记录
SELECT EnterpriseID, FlairID
FROM (
    SELECT 
        EnterpriseID,
        FlairID,
        -- 按EnterpriseID分组,FlairID降序排序,第一条就是优先级最高的记录
        ROW_NUMBER() OVER (PARTITION BY EnterpriseID ORDER BY FlairID DESC) AS RowNum
    FROM AllCandidateRecords
) RankedRecords
WHERE RowNum = 1;

关键调整说明

  • 用UNION ALL替代UNION:UNION会自动去重,但我们需要保留所有候选记录,再通过窗口函数筛选优先级最高的,这样逻辑更透明
  • 窗口函数ROW_NUMBER():按EnterpriseID分组,按FlairID降序排序,这样每个EnterpriseID下,FlairID为1300的记录会排在第一位,取RowNum=1就得到了我们需要的唯一记录
  • 移除了原查询中a.ManagerNm <> a.GlobalOfferingLeadNm的条件:即使managernm和globalofferingleadnm同名,窗口函数也会自动优先保留FlairID更高的那条,无需提前过滤,这样也避免了遗漏边缘情况

如果你的业务逻辑确实需要提前排除managernm和globalofferingleadnm同名的情况,也可以把那个条件加回到第二部分的WHERE子句中,但上面的写法已经能满足你的核心需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:13:01