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

如何删除无BUDGET_N或ACT_N数据的ER-月份组行?SQL咨询

需求与SQL修正

需求描述

  • 现有一张数据表,需按如下规则筛选数据:
    • 以ER和MONTH为维度对数据分组
    • 若某分组中不存在SCENARIO_CD为BUDGET_N的数据,或不存在SCENARIO_CD为ACT_N的数据,则该分组所有行均不纳入最终结果
    • 最终仅保留同时包含BUDGET_N和ACT_N的ER+MONTH分组的全部行

初始代码问题分析

你提供的初始SQL逻辑与需求完全相反:

select *
FROM your_table
WHERE (ER, MONTH) IN (
    SELECT ER, MONTH
    FROM your_table
    GROUP BY ER, MONTH
    HAVING COUNT(CASE WHEN SCENARIO_CD = 'BUDGET_N' THEN 1 END) = 0
       OR COUNT(CASE WHEN SCENARIO_CD = 'ACT_N' THEN 1 END) = 0
);

这段代码会筛选出**缺少BUDGET_N或缺少ACT_N**的分组的所有行,恰好是需求中需要排除的数据。

修正后的SQL代码

要实现需求,需将HAVING子句的逻辑改为判断两种类型的数据同时存在:

SELECT *
FROM your_table
WHERE (ER, MONTH) IN (
    SELECT ER, MONTH
    FROM your_table
    GROUP BY ER, MONTH
    HAVING COUNT(CASE WHEN SCENARIO_CD = 'BUDGET_N' THEN 1 END) > 0
       AND COUNT(CASE WHEN SCENARIO_CD = 'ACT_N' THEN 1 END) > 0
);

更简洁的替代写法

可以通过COUNT(DISTINCT)快速判断两种类型是否都存在:

SELECT *
FROM your_table
WHERE (ER, MONTH) IN (
    SELECT ER, MONTH
    FROM your_table
    WHERE SCENARIO_CD IN ('BUDGET_N', 'ACT_N')
    GROUP BY ER, MONTH
    HAVING COUNT(DISTINCT SCENARIO_CD) = 2
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:44:59