Поворотный стол от горизонтального до вертикального - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть следующая таблица результатов:

Example of current SQL table

Мне нужна таблица со следующей структурой:

Final table

Есть ли возможность сделать это с SQL?

Заранее спасибо.

РЕДАКТИРОВАТЬ (запрос SQL с проверенной временной таблицей):

        CREATE TABLE #FINAL_STACK
        (
            FB_DATE datetime,
            FB_DESC VARCHAR(200)
        )

        INSERT INTO #FINAL_STACK(FB_DATE, FB_DESC)
        SELECT '2017-03-09', 'D - FIZ: 1'
        UNION
        SELECT '2017-03-09', 'D - PRI: 1'
        UNION      
        SELECT '2017-03-10', 'D - FIZ: 1'
        UNION
        SELECT '2017-03-10', 'D - PRI: 1'
        UNION
        SELECT '2017-03-13', 'D - FIZ: 2'
        UNION
        SELECT '2017-03-13', 'D - PRI: 1'
        UNION
        SELECT '2017-03-13', 'D - TEPAP: 1'

        SELECT * FROM #FINAL_STACK

1 Ответ

0 голосов
/ 29 ноября 2018

Попробуйте:

DECLARE @DynammicTSQLStatement NVARCHAR(MAX)
       ,@DynamicPIVOTColumns NVARCHAR(MAX);


SET @DynamicPIVOTColumns = STUFF
                            (
                                (
                                SELECT ',[' + CAST([FB_DATE] AS VARCHAR(12)) + ']'
                                FROM #FINAL_STACK
                                GROUP BY [FB_DATE]
                                ORDER BY [FB_DATE]
                                FOR XML PATH('') ,TYPE
                                ).value('.', 'NVARCHAR(MAX)')
                                ,1
                                ,1
                                ,''
                            );

SET @DynammicTSQLStatement = N'
SELECT *
FROM
(
SELECT *
     ,ROW_NUMBER() OVER (PARTITION BY  FB_DATE ORDER BY (SELECT 1)) AS RID
FROM #FINAL_STACK
) DS
PIVOT
(
    MAX([FB_DESC]) FOR [FB_DATE] IN (' + @DynamicPIVOTColumns + ')
) PVT';


EXEC sp_executesql @DynammicTSQLStatement;

enter image description here

Нам необходимо выполнить динамический разворот, чтобы быть уверенным, что он всегда будет работать в разные дни.Также обратите внимание, что мы создаем столбец идентификатора строки, используя ROW_NUMBER, чтобы обеспечить отображение всех записей на определенную дату.В противном случае вы получите только одно значение (например, минимальное или максимальное) в зависимости от агрегатной функции PIVOT.

...