SQL Pivot после перекрестного применения

Я пытаюсь сделать поворот в SQL Server, где мне нужно повернуть следующую таблицу:

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

person SUMguy    schedule 30.11.2016    source источник


Ответы (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.

person gotqn    schedule 30.11.2016