如何用SQL将查询结果转换为指定列结构(无需Pivot)
解决方案:使用条件聚合实现行转列
首先修正原查询中的逻辑错误:AND (a.kndnr = '10027' and a.kndnr = '10026') 不符合逻辑,一个字段无法同时等于两个不同值,应改为 AND a.kndnr IN ('10027', '10026') 或者 AND (a.kndnr = '10027' OR a.kndnr = '10026')。
以下是无需使用Pivot的SQL写法,适用于Databricks SQL、Oracle、MySQL等主流SQL环境:
SELECT MAX(CASE WHEN a.code = 'A00' THEN a.value END) AS A00, MAX(CASE WHEN a.code = 'A01' THEN a.value END) AS A01, a.kndnr FROM raw a JOIN z_raw b ON a.code = b.zgrpc WHERE b.gubun = '09811' AND concat(a.gjahr, a.poper) = '2024001' AND a.artnr = 'F004000' AND a.prctr = '021011' AND a.artnr_t = 'H50M' AND a.kndnr IN ('10027', '10026') GROUP BY a.kndnr;
逻辑说明
- 通过
CASE WHEN语句,针对每个code值(A00、A01)提取对应的value - 使用
MAX聚合函数(因为每个kndnr与code的组合仅存在一条数据,用MIN也可),确保每个kndnr分组下只保留对应code的唯一值 - 最后按
kndnr分组,将同一客户的不同code值转换为列,得到目标结果
内容的提问来源于stack exchange,提问作者홍찬혁
相关产品推荐
相关产品推荐

