Динамическое получение нескольких строк с помощью Pivot в SQL - PullRequest
1 голос
/ 26 марта 2020

I sh для добавления нескольких строк для конкретной сводной таблицы.

Имя таблицы: MasterTable

 FieldName | FieldValue
------------------------
 Field1    | F1value1
 Field2    | F2value1
 Field3    | F3value1
 Field1    | F1value2
 Field2    | F2value2
 Field3    | F3value2

Ожидаемый результат:

Field1     | Field2    | Field3
---------------------------------
F1value1   | F2value1 | F3value1
F1value2   | F2value2 | F3value2

I попробовал этот код, но в результате я получил только одну строку.

    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)
    select @cols = STUFF((SELECT distinct ',' + QUOTENAME(FieldName) from MasterTable FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')
    set @query = 'SELECT  ' + @cols + ' from (select FieldName, FieldValue from MasterTable ) x
                pivot 
                (
                    max(FieldValue)
                    for FieldName in (' + @cols + ')
                ) p '

    execute(@query)

Вывод:

Field1     | Field2    | Field3
---------------------------------
F1value1   | F2value1 | F3value1

Может кто-нибудь, пожалуйста, помогите мне иметь несколько строк, используя сводную таблицу.

1 Ответ

1 голос
/ 26 марта 2020

Для подзапроса используйте:

(select FieldName, FieldValue,
        row_number() over (partition by FieldName order by FieldName) as seqnum
 from MasterTable
)

pivot, чтобы учесть это при повороте.

Примечание. Это гарантирует количество строк, но порядок каждый столбец произвольный . Вы можете заменить order by разумным столбцом для заказа.

...