我正在尝试在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
答案 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
函数。