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

如何在SQL中按分组多值判断规则生成目标结果表

SQL解决方案:按分组规则筛选目标记录

样本主表

centerdocumentdocumentitemprofit
NL100100000105
NL1011000001010
NL100100000100
NL102100000105
NL200200000101
NL300300000106
NL300300000107
NL300300000104

筛选规则

  • 场景1:document + documentitem分组下仅1条center记录,直接保留该记录(如200+00010分组)
  • 场景2:分组下有多条记录但center值全部相同,保留任意一条(如300+00010分组)
  • 场景3:分组下存在多个不同center值,保留profit=0的记录(如100+00010分组)

目标结果表

centerdocumentdocumentitemprofit
NL100100000100
NL200200000101
NL300300000104

SQL实现

WITH grouped_stats AS (
    SELECT 
        *,
        -- 统计分组内不同center的数量
        COUNT(DISTINCT center) OVER (PARTITION BY document, documentitem) AS distinct_center_count,
        -- 标记当前记录是否为profit=0的行
        CASE WHEN profit = 0 THEN 1 ELSE 0 END AS is_zero_profit,
        -- 给同center的记录生成行号(用于场景2取任意一条)
        ROW_NUMBER() OVER (PARTITION BY document, documentitem, center ORDER BY profit) AS rn
    FROM your_table_name -- 替换为你的实际表名
)
SELECT 
    center,
    document,
    documentitem,
    profit
FROM grouped_stats
WHERE 
    -- 场景3:分组存在多个不同center,且当前是profit=0的记录
    (distinct_center_count > 1 AND is_zero_profit = 1)
    -- 场景1+场景2:分组center唯一,取任意一条记录
    OR (distinct_center_count = 1 AND rn = 1);

逻辑说明

  1. CTE grouped_stats:
    • distinct_center_count:区分分组属于多center(场景3)还是单center(场景1/2)。
    • is_zero_profit:快速定位场景3需要保留的目标行。
    • rn:在document+documentitem+center子分组内生成行号,确保场景2中同center的多条记录只取一条,场景1的单条记录自然也会被选中。
  2. 主查询筛选:
    • 直接匹配三个场景的条件,一次性输出符合要求的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:45:47