如何在DB2数据库中将键值对转换为列标题及对应列
DB2 表结构转换 SQL 实现方案
针对你的表结构转换需求,这里提供三种适用于DB2的SQL实现方法:
方法一:直接字段映射(固定键名场景)
如果原表中每行的Key1固定为Id、Key2固定为Name,可以直接通过字段别名完成转换:
SELECT Val1 AS Id, Val2 AS Name, "Group" AS "Group" FROM your_source_table;
注意:
Group是DB2保留字,需用双引号包裹。
方法二:条件聚合(通用动态场景)
如果原表键名不固定,或同一分组下存在多行存储不同键值的情况,可通过条件聚合实现转置:
WITH numbered_rows AS ( SELECT Key1, Val1, Key2, Val2, "Group", -- 为同一分组内的行添加序号,确保Id和Name精准匹配 ROW_NUMBER() OVER (PARTITION BY "Group" ORDER BY Val1) AS row_num FROM your_source_table ) SELECT "Group", MAX(CASE WHEN Key1 = 'Id' THEN Val1 END) AS Id, MAX(CASE WHEN Key2 = 'Name' THEN Val2 END) AS Name FROM numbered_rows GROUP BY "Group", row_num;
方法三:DB2 PIVOT 语法(版本兼容)
若你的DB2版本为11.1及以上,支持官方PIVOT语法,可使用以下方式:
SELECT "Group", Id, Name FROM your_source_table PIVOT ( MAX(Val1) FOR Key1 IN ('Id' AS Id), MAX(Val2) FOR Key2 IN ('Name' AS Name) ) AS pivot_table GROUP BY "Group", Id, Name;
内容的提问来源于stack exchange,提问作者Mayuresh Sawant
相关产品推荐
相关产品推荐

