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

SQL自Left Join同列数据遇重复行及行列转换需求咨询

解决项目阶段数据查询重复行问题

你用自Left Join出现重复行的核心原因是:只关联了Project ID,没在连接条件里限定两张表的阶段,导致出现不必要的交叉匹配,生成了多条不符合预期的记录。下面给两种实用的解决办法:

方法一:条件聚合(推荐,逻辑更清晰)

通过分组聚合直接把同一项目的不同阶段数据合并成一行,精准提取所需日期:

SELECT 
    Project_ID,
    MAX(CASE WHEN Phase = 'Approve' THEN Date END) AS Approve_Date,
    MAX(CASE WHEN Phase = 'Close' THEN Date END) AS Close_Date
FROM project_phases
WHERE Phase IN ('Approve', 'Close')
GROUP BY Project_ID
HAVING MAX(CASE WHEN Phase = 'Approve' THEN Date END) IS NOT NULL;
  • GROUP BY Project_ID 把同一项目的多行数据合并为一行
  • CASE 语句精准抓取对应阶段的日期,MAX 用来确保每个阶段只取唯一有效日期(每个项目每个阶段只会有一条记录)
  • HAVING 子句过滤掉没有Approve记录的项目,严格符合“已进入Approve阶段”的需求

方法二:修正自Left Join写法

调整连接条件,明确限定两张表的阶段,避免交叉匹配:

SELECT 
    a.Project_ID,
    a.Date AS Approve_Date,
    c.Date AS Close_Date
FROM project_phases a
LEFT JOIN project_phases c 
    ON a.Project_ID = c.Project_ID 
    AND c.Phase = 'Close'
WHERE a.Phase = 'Approve';
  • 左表a只筛选Approve阶段的记录,作为主数据
  • 右表c通过Project ID关联的同时,限定只匹配Close阶段的记录
  • 这样每个Approve记录只会对应0或1条Close记录,不会出现重复行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:33:25