DB2多条件数据透视问题:合并同Body同Color的多材质记录
解决方案
可以通过分组+条件聚合实现你要的合并效果,核心是按body_code和color分组,提取同组内不同序列的材质:
SELECT body_code, MAX(CASE WHEN seq = 1 THEN material END) AS material_1, color AS color_1, MAX(CASE WHEN seq = 2 THEN material END) AS material_2, color AS color_2 FROM ( -- 先为同一Body+颜色下的材质生成序列 SELECT body_code, material, color, ROW_NUMBER() OVER (PARTITION BY body_code, color ORDER BY material) AS seq FROM product_table -- 替换为你的实际表名 -- 保留你原有的筛选条件 ) t GROUP BY body_code, color;
逻辑说明:
- 内层查询使用
ROW_NUMBER(),按body_code和color分区、材质排序,为每个分组内的材质生成1、2的序列; - 外层查询按
body_code和color分组,通过MAX(CASE...)分别提取序列1和2对应的材质; - 同一Body+颜色下的多种材质会被合并到单行,比如你提到的
BoDB会输出BoDB | Fabric | Black | Leather | Black; - 对于仅有一种材质的产品,
material_2会返回NULL,可根据需求用COALESCE(material_2, '')替换为空字符串。
执行该查询后,就能得到你预期的结果。
内容的提问来源于stack exchange,提问作者Geoff_S
相关产品推荐
相关产品推荐

