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

在Toad Oracle中按指定逻辑过滤customer表记录求助

Oracle customer表记录筛选方案

针对你需要的过滤逻辑——同一ID+ORDERID组合同时存在CODE='TT'和CODE='TP'时,仅保留TP记录,以下提供两种可行的SQL写法,均无需GROUP BY且能保留表中所有列:

方法一:使用EXISTS子查询(直观易懂)

直接排除掉那些属于TT且同组存在TP的记录,其余记录全部保留:

SELECT *
FROM customer
WHERE NOT (
    CODE = 'TT'
    AND EXISTS (
        SELECT 1
        FROM customer c2
        WHERE c2.ID = customer.ID
          AND c2.ORDERID = customer.ORDERID
          AND c2.CODE = 'TP'
    )
);

方法二:使用窗口函数(灵活扩展)

通过窗口函数标记每个分组的状态,再根据状态筛选:

SELECT *
FROM (
    SELECT 
        *,
        -- 统计当前ID+ORDERID组内,属于TT/TP的记录总数
        COUNT(CASE WHEN CODE IN ('TT', 'TP') THEN 1 END) OVER (PARTITION BY ID, ORDERID) AS code_pair_count,
        -- 标记当前记录是否为TP
        CASE WHEN CODE = 'TP' THEN 1 ELSE 0 END AS is_tp_record
    FROM customer
) filtered
WHERE (code_pair_count = 1) OR (code_pair_count = 2 AND is_tp_record = 1);

逻辑说明:

  • 当code_pair_count=1:说明该组只有TT或只有TP,直接保留;
  • 当code_pair_count=2:说明组内同时有TT和TP,仅保留标记为is_tp_record=1的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:31:00