SQL同ID多行分散列数据合并为单行的简化实现方法咨询
简化实现方案
你这个需求属于典型的按id分组的行转列聚合场景,完全不需要多次LEFT JOIN,用聚合函数就能实现,代码更简洁、执行效率也更高:
SELECT id, MAX(RowA) AS RowA, MAX(RowB) AS RowB, MAX(RowC) AS RowC FROM Example GROUP BY id
实现原理
你的表中每个id对应的RowA、RowB、RowC都只有唯一的非空值,MAX/MIN这类聚合函数会自动忽略NULL值,直接取到对应的有效值,经过GROUP BY id分组后每个id仅返回一行,完全匹配你需要的结果。
如果业务场景中某个id对应同一列存在多个非空值,你可以根据使用的数据库调整聚合函数,比如MySQL用GROUP_CONCAT、PostgreSQL/SQL Server用STRING_AGG把多个值拼接输出即可。
另外你原来的写法还存在两个小问题:一是最后一个LEFT JOIN的表名误写为FLOWFILE,应该是Example;二是部分列定义末尾多了冗余逗号,用聚合写法也能避免这类语法错误。
内容的提问来源于stack exchange,提问作者bigdataadd
相关产品推荐
相关产品推荐

