Как заставить SQL Pivot отображать более одной строки - PullRequest
2 голосов
/ 09 июня 2019

Мне удалось отобразить каждую строку в столбце с помощью сводки, однако при наличии нескольких значений отображается только одно из значений строки. Я подозреваю, что функция MAX в цикле for не может найти успешную замену.

Я пробовал другие функции SQL.

DECLARE @cols AS NVARCHAR(MAX),
        @query AS NVARCHAR(MAX)

SELECT @cols = STUFF((SELECT ',' + QUOTENAME(Provincia)
                      FROM Codigos_Postales
                      GROUP BY Provincia
                      ORDER BY Provincia
                      FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

SET @query = N'SELECT Poblacion,' + @cols + N' from
            (
                select * from Codigos_Postales
            ) x
            pivot
            (
                MAX(Codigo_Postal)
                for Provincia in (' + @cols + N')
            ) p ORDER BY Poblacion ASC'

EXEC sp_executesql @query;

Таблица, которую я пытаюсь развернуть:

original table

Результат:

table result

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

expected table result

1 Ответ

3 голосов
/ 09 июня 2019

Если я правильно понимаю, добавление ROW_NUMBER к вашим исходным данным поможет.Пример сценария PIVOT будет таким, как показано ниже.Просто игнорируйте столбец RN из вашего окончательного вывода, вот и все.

SET @query = 
N'SELECT Poblacion,' + @cols + N' from
(
    SELECT
    ROW_NUMBER() OVER (ORDER BY Provincia) RN,
    *  
    FROM Codigos_Postales
) x
PIVOT
(
    MAX(Codigo_Postal)
    FOR Provincia IN (' + @cols + N')
) p ORDER BY Poblacion ASC'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...