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

如何编写SQL查询筛选无COSTS报告码的项目信息

解决方案

要提取所有未包含report_code为"COSTS"的项目信息,核心是筛选出整个PROJECT_ID下完全没有COSTS类型记录的所有关联行,以下是几种高效的实现方式:

方法1:使用NOT EXISTS子查询

这是直观且性能表现较好的写法,逐行检查当前项目是否存在COSTS记录:

SELECT t1.*
FROM Table_1 t1
WHERE NOT EXISTS (
    SELECT 1
    FROM Table_1 t2
    WHERE t2.PROJECT_ID = t1.PROJECT_ID
      AND t2.report_code = 'COSTS'
);

方法2:GROUP BY + HAVING筛选合法项目ID

先通过分组统计找出符合条件的PROJECT_ID,再关联原表获取所有记录:

SELECT t1.*
FROM Table_1 t1
JOIN (
    SELECT PROJECT_ID
    FROM Table_1
    GROUP BY PROJECT_ID
    HAVING SUM(CASE WHEN report_code = 'COSTS' THEN 1 ELSE 0 END) = 0
) valid_projects ON t1.PROJECT_ID = valid_projects.PROJECT_ID;

这里用CASE表达式统计每个项目下COSTS的数量,等于0则说明该项目无COSTS记录。

方法3:LEFT JOIN筛选未匹配项

通过左连接自身并筛选未关联到COSTS记录的行:

SELECT t1.*
FROM Table_1 t1
LEFT JOIN Table_1 t2 
    ON t1.PROJECT_ID = t2.PROJECT_ID 
    AND t2.report_code = 'COSTS'
WHERE t2.PROJECT_ID IS NULL;

如果某个项目存在COSTS记录,左连接后t2会有对应数据,否则t2的字段为NULL,以此筛选目标行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:15:05