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

如何使用子查询进行两次过滤?SQL矛盾约束数据筛选需求

实现两次过滤的子查询方案

嘿,我来帮你调整这个查询,完美实现你要的两次过滤需求!你的目标是先筛出sproject_number为NULL的记录,再从这个结果里挑出status_desc等于'90-Lost Opportunity'的条目对吧?

子查询分两次过滤的写法

你可以给子查询加个别名,然后在外层查询里添加第二次过滤的条件,这样就严格按照“先筛选空值,再筛选状态”的逻辑执行了:

SELECT ProjectNumber, PName 
FROM (
 -- 第一次过滤:仅保留sproject_number为NULL的记录
 SELECT DISTINCT 
   T0.project_number_ext AS ProjectNumber, 
   T0.project_key AS PKey, 
   T0.sproject_number AS sPNumber, 
   T0.project_number AS PNumber, 
   T0.schedule_finish AS SFinish, 
   T0.status_desc AS SDesc, 
   T0.Project_name AS PName
 FROM trimergo.rpt_getProjectPOC T0
 WHERE T0.sproject_number IS NULL
) AS FilteredNulls -- 给子查询起个别名,方便外层引用
-- 第二次过滤:从空值结果里筛选目标状态
WHERE FilteredNulls.SDesc = '90-Lost Opportunity'
GROUP BY ProjectNumber, PName;

简化版(等价逻辑,性能更优)

其实如果不需要保留中间字段(比如PKey、SFinish这些),你也可以把两个过滤条件合并到一次查询里,逻辑完全一致,而且数据库能更高效地执行:

SELECT DISTINCT T0.project_number_ext AS ProjectNumber, T0.Project_name AS PName
FROM trimergo.rpt_getProjectPOC T0
WHERE T0.sproject_number IS NULL 
  AND T0.status_desc = '90-Lost Opportunity'
GROUP BY ProjectNumber, PName;

这里补充个小细节:你的原查询里同时用了DISTINCT和GROUP BY,如果ProjectNumber和PName是一一对应的关系,其实选其中一个就足够去重了,不过保留两者也不会有问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:17:42