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

编写SQL识别分组内多子分组,排查插入操作重复键报错问题

符合需求的SQL查询方案

你可以使用以下两种写法实现需求,两种写法均可返回所有存在多组Company/Code组合的State/Zone分组下的全部原始记录:

写法1:分组过滤关联法(兼容性更好)

WITH BadStateZoneGroups AS (
    -- 筛选出存在多组不同Company/Code组合的异常State/Zone分组
    SELECT 
        State,
        Zone
    FROM Companies
    GROUP BY State, Zone
    HAVING COUNT(DISTINCT CONCAT(Company, N'☠', Code)) > 1
)
-- 关联返回异常分组下的全部原始记录
SELECT 
    c.RecordNumber,
    c.State,
    c.Zone,
    c.Company,
    c.Code,
    c.Revenue
FROM Companies c
INNER JOIN BadStateZoneGroups bg 
    ON c.State = bg.State 
    AND c.Zone = bg.Zone
ORDER BY c.RecordNumber;

注:CONCAT拼接时使用的特殊分隔符请确保不会出现在Company和Code字段的取值中,避免出现不同组合拼接后结果相同的误判。

写法2:窗口函数法(无需拼接字段,更稳妥)

WITH CompanyGroupRank AS (
    SELECT 
        *,
        -- 同一个State/Zone分组下,不同的Company/Code组合会生成不同的排名
        DENSE_RANK() OVER(
            PARTITION BY State, Zone 
            ORDER BY Company, Code
        ) AS combination_rank
    FROM Companies
)
SELECT 
    RecordNumber,
    State,
    Zone,
    Company,
    Code,
    Revenue
FROM CompanyGroupRank
WHERE EXISTS (
    SELECT 1 
    FROM CompanyGroupRank cr
    WHERE cr.State = CompanyGroupRank.State
        AND cr.Zone = CompanyGroupRank.Zone
        AND cr.combination_rank > 1
)
ORDER BY RecordNumber;

两种写法在你提供的测试数据集上运行,均会返回与期望输出完全一致的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 16:54:03