首页 > 解决方案 > 在 SQL Server 中将表行展平为列

问题描述

我有下面的 SQL 表,其中有随机生成的数据

  Code          Data
    SL Payroll    22
    SL Payroll    33
    SL Payroll    43
    ..            .....

我想传输数据,格式如下图

Code         Data1   Data2   Data3  ..
SL Payroll   22       33      43    ....  

有人建议使用数据透视表来转换数据,如下所示

SELECT Code,
       [22] Data1,
       [33] Data2,
       [43] Data3
FROM
    (
      SELECT *
      FROM T
    ) TBL
    PIVOT
    (
      MAX(Data) FOR Data IN([22],[33],[43])
    ) PVT

但这假设数据点是静态的,如 22,33,但它们是动态生成的。

标签: sql-servertsqlsql-server-2008pivotsql-server-2014

解决方案


如果您有已知或最大数量的所需列,则可以进行简单的 PIVOT,否则,您需要使用DYNAMIC

例子

 Select *
  From (
        Select [Code]
              ,[Data]
              ,[Col] = concat('Data',Row_Number() over (Partition By [Code] Order by 1/0))
         From  YourTable
       ) src
 Pivot (max([Data]) for [Col] in ([Data1],[Data2],[Data3],[Data4],[Data5])) pvt

退货

Code        Data1   Data2   Data3   Data4   Data5
SL Payroll  22      33      43      NULL    NULL

推荐阅读