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 函数。