首页 > 解决方案 > 在 SQL Server 中将多行转换为多列

问题描述

动态 SQL 帮助:

样本数据

dt_range type   amt     prct
2018     12     0.00    0.00
2018     19     3000    1.00
2019     15     107     0.5

期望的输出

dt_range    type12  type19  type15      type12_amt  type19_amt  type15_amt      type12_prct type19_prct     type15_prct
2018        12      19      null            0.00        3000        null            0.00        1.00        null
2019        null    null    15              null        null        107             null        null        0.5

标签: sqlsql-servertsqlgroup-bypivot

解决方案


如果您正在处理预定义的类型列表,则可以使用条件聚合来透视:

select
    dt_range,
    max(case when type = 12 then type end) type12,
    max(case when type = 19 then type end) type19,
    max(case when type = 15 then type end) type15,
    max(case when type = 12 then amt  end) type12_amt,
    max(case when type = 19 then amt  end) type19_amt,
    max(case when type = 15 then amt  end) type15_amt
    max(case when type = 12 then prct end) type12_prct,
    max(case when type = 19 then prct end) type19_prct,
    max(case when type = 15 then prct end) type15_prct
from mytable
group by dt_range

推荐阅读