2016-11-30 105 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函數。