SQL 交叉应用后的数据透视
SQL Pivot after Cross Apply
我正在尝试在 SQL 服务器中做一个枢轴,其中我需要枢轴以下 table:
key value
column1 billy
column2 billy@billy.com
column5 NULL
column6 false
column9 true
我希望 "key" 列中的值成为 headers 列。这里的另一个问题是我正在使用 CROSS APPLY 从另一个 table 生成这个 table。我开始于:
select * from jtable cross apply openjson(json)
这会导致上面显示的 table 格式。
如果我不使用交叉应用,我会得到如下所示的 table:
ID json
1 "column1":billy, "column2":billy@billy.com
2 "column1":steve, "column2":steve@etc.com
所以我试图得到一个看起来像这样的 table:
column1 column2 column3
billy billy@billy.com false
steve steve@etc.com false
像这样:
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
函数。
我正在尝试在 SQL 服务器中做一个枢轴,其中我需要枢轴以下 table:
key value
column1 billy
column2 billy@billy.com
column5 NULL
column6 false
column9 true
我希望 "key" 列中的值成为 headers 列。这里的另一个问题是我正在使用 CROSS APPLY 从另一个 table 生成这个 table。我开始于:
select * from jtable cross apply openjson(json)
这会导致上面显示的 table 格式。
如果我不使用交叉应用,我会得到如下所示的 table:
ID json
1 "column1":billy, "column2":billy@billy.com
2 "column1":steve, "column2":steve@etc.com
所以我试图得到一个看起来像这样的 table:
column1 column2 column3
billy billy@billy.com false
steve steve@etc.com false
像这样:
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
函数。