交叉应用后的SQL Pivot

时间:2016-11-30 04:03:28

标签: sql sql-server tsql pivot cross-apply

我正在尝试在SQL Server中执行一个数据透视,其中我需要转动下表:

key       value
column1    billy
column2    billy@billy.com
column5    NULL
column6    false
column9    true

我想要"键"中的值列为列标题。这里的另一个问题是我使用CROSS APPLY从另一个表生成此表。我从:

开始
select * from jtable cross apply openjson(json)

导致上面显示的表格格式。

如果我不使用交叉申请,我会得到一张如下表格:

ID json
1  "column1":billy, "column2":billy@billy.com
2  "column1":steve, "column2":steve@etc.com

所以我试图找到一个看起来像这样的表:

column1    column2            column3
billy      billy@billy.com    false
steve      steve@etc.com      false

1 个答案:

答案 0 :(得分:1)

这样的事情:

SELECT *
FROM
(
    select ROW_NUMBER() OVER (ORDER BY(SELECT 1)) AS ID
          ,* 
    from jtable 
    cross apply openjson(json)
) DS
PIVOT
(
    MAX([value]) FOR [key] IN ([column1], [column2], [column3], ... , [columnN] )
) PVT

如果您不知道列数,请搜索dynamic PIVOT。如果您需要按其他条件排序(以其他特殊方式生成ID) - 您可以更改ROW_NUMBER函数。