2016-11-30 107 views
2

我试图做一个支点在SQL Server中,其中我需要为下表转动:SQL枢轴应用

key  value 
column1 billy 
column2 [email protected] 
column5 NULL 
column6 false 
column9 true 

我想在“密钥”列中的值是列标题。另一个问题是我正在使用CROSS APPLY从另一个表中生成此表。我开始于:

select * from jtable cross apply openjson(json) 

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

如果我不使用交叉应用,我得到一个表,看起来像这样:

ID json 
1 "column1":billy, "column2":[email protected] 
2 "column1":steve, "column2":[email protected] 

所以我想有一个表,看起来像这样结束了:

column1 column2   column3 
billy  [email protected] false 
steve  [email protected]  false 

回答

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