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

基于规则标记t1表重复数据的SQL实现问题求助

解决方案

规则优先级梳理

先明确规则的执行逻辑顺序:

  1. 所有idcommande唯一的行,直接标记为keep
  2. 同一idcommande分组内,满足statut='in progress' AND typecom='canceled'的行标记为keep
  3. 剩余分组内的行,仅保留idref IS NOT NULL的,标记为keep;其余标记为discard

实现SQL代码

使用窗口函数COUNT()判断分组行数,结合CASE语句完成标记:

SELECT 
    t1.*,
    CASE
        -- 规则1:idcommande唯一的行
        WHEN COUNT(*) OVER (PARTITION BY idcommande) = 1 THEN 'keep'
        -- 规则2:满足statut和typecom条件的行
        WHEN statut = 'in progress' AND typecom = 'canceled' THEN 'keep'
        -- 规则3:idref不为空的行
        WHEN idref IS NOT NULL THEN 'keep'
        -- 其余行标记为丢弃
        ELSE 'discard'
    END AS keep_flag
FROM t1;

如果需要布尔类型标记(True/False),只需替换对应值:

SELECT 
    t1.*,
    CASE
        WHEN COUNT(*) OVER (PARTITION BY idcommande) = 1 THEN TRUE
        WHEN statut = 'in progress' AND typecom = 'canceled' THEN TRUE
        WHEN idref IS NOT NULL THEN TRUE
        ELSE FALSE
    END AS keep_flag
FROM t1;

逻辑验证示例

假设测试数据:

idcommandestatuttypecomidref
1001completednormalREF01
1002in progresscanceledNULL
1002pendingnormalNULL
1003in progressnormalNULL
1003completedcanceledREF02

执行后结果:

idcommandestatuttypecomidrefkeep_flag
1001completednormalREF01keep
1002in progresscanceledNULLkeep
1002pendingnormalNULLdiscard
1003in progressnormalNULLdiscard
1003completedcanceledREF02keep

该结果完全符合所有规则要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:02:03