SQL查询结果优化:将多行列合并为单行的实现方案
SQL优化方案
直接用聚合函数MAX()配合CASE表达式,同时调整分组逻辑,就能把同一loadNumber的所有有效日期合并到单行:
SELECT loadNumber, MAX(CASE WHEN E.Clave = 'LOD' THEN FechaEvento ELSE NULL END) AS 'Load Date USA', MAX(CASE WHEN E.Clave = 'DAA' THEN FechaEvento ELSE NULL END) AS 'Colocacion AA', MAX(CASE WHEN E.CLAVE = 'RPD' THEN FechaEvento ELSE NULL END) AS 'Docs Listos', MAX(CASE WHEN E.Clave = 'IDT' THEN FechaEvento ELSE NULL END) AS 'Llegada MX', MAX(CASE WHEN E.Clave = 'ULD' THEN FechaEvento ELSE NULL END) AS 'Descarga MX' FROM OrdenEvento OE INNER JOIN Evento E ON OE.idEvento = E.ID WHERE loadNumber = '60317' GROUP BY loadNumber
关键调整点:
- 给每个
CASE表达式套上MAX()聚合函数:每个Clave对应的日期只会在一行里有值,其他行都是NULL,MAX()会自动忽略NULL,提取出该字段的有效日期值。 - 修改
GROUP BY仅保留loadNumber:将同一loadNumber的所有行合并为一组,最终输出单行结果。
如果某个loadNumber对应同一个Clave有多个日期(比如重复事件),MAX()会取最新的日期;如果需要最早的日期,可以换成MIN(),根据实际业务需求调整即可。
内容的提问来源于stack exchange,提问作者itsFerxis
相关产品推荐
相关产品推荐

