如何使用SQL JOIN语句将同表不同Code值转为新表列?
使用JOIN语句实现行转列需求
当然可以用JOIN语句实现这个行转列的需求,核心思路是对原表进行自连接,分别筛选不同Code对应的Amount值,最终合并成目标结构。
原表(Table1)结构与数据
| Policy | Code | Amount |
|---|---|---|
| A | XX | 10.00 |
| A | YY | 11.00 |
| A | ZZ | 13.00 |
目标表结构与数据
| Policy | CodeAmt1 | CodeAmt2 | CodeAmt3 |
|---|---|---|---|
| A | 10.00 | 11.00 | 13.00 |
实现SQL代码
以下是通过自连接创建新表的示例(逻辑适配多数主流数据库,语法细节可根据数据库调整):
CREATE TABLE TargetTable AS SELECT t1.Policy, t1.Amount AS CodeAmt1, t2.Amount AS CodeAmt2, t3.Amount AS CodeAmt3 FROM Table1 t1 JOIN Table1 t2 ON t1.Policy = t2.Policy AND t2.Code = 'YY' JOIN Table1 t3 ON t1.Policy = t3.Policy AND t3.Code = 'ZZ' WHERE t1.Code = 'XX';
逻辑说明
- 以筛选
Code='XX'的记录作为主表t1,其Amount直接映射为CodeAmt1 - 通过
JOIN关联同表的t2,筛选Code='YY'的记录,提取对应Amount作为CodeAmt2 - 再次关联同表的
t3,筛选Code='ZZ'的记录,提取对应Amount作为CodeAmt3 - 所有连接通过
Policy字段约束,确保是同一保单下的匹配数据
如果存在多个Policy的场景,只要每个Policy下都有XX、YY、ZZ三种Code的记录,该写法就能自动适配生成对应行数据。
内容的提问来源于stack exchange,提问作者Sathish Chidambaram
相关产品推荐
相关产品推荐

