SQL Pivot - взять дату изменения из столбца и сделать его заголовком строки - PullRequest
1 голос
/ 29 апреля 2020

У меня есть базовый c запрос, который выглядит следующим образом.

SELECT Database_Name, 
       FilingDate, 
       SUM(ISNULL([column1], 0) + ISNULL(column2], 0) + 
           ISNULL([column3], 0) + ISNULL([column4], 0)) AS Total
FROM  SomeTable(NOLOCK)
GROUP BY Database_Name, 
         FilingDate
ORDER BY Database_Name, 
         FilingDate DESC

Этот запрос выводит результаты, которые выглядят следующим образом.

Table 1

Я хотел бы взять даты, возвращенные в столбце FilingDate, и использовать их в качестве новых заголовков столбцов с итогами для каждой базы данных и даты используется в качестве содержимого строки. Конечный результат должен выглядеть следующим образом:

Table 2

Мои исследования показывают, что лучшая возможность - это разворот, но я изо всех сил пытаюсь найти правильный путь к выполняйте его, так как мои даты меняются каждый день. Мы будем благодарны за любую помощь.

1 Ответ

0 голосов
/ 29 апреля 2020

Если это MS SQL, вы можете использовать динамическую c сводную таблицу. Вот решение, использующее ваш запрос (должно работать, но у меня нет базовых данных для его проверки).

SELECT              Database_Name, 
                           FilingDate, 
                           SUM(   ISNULL(column1 ,0) + 
                                  ISNULL(column2],0) + 
                                  ISNULL([column3],0) + 
                                  ISNULL([column4],0)
                           ) AS Total
INTO #T1
FROM                SomeTable(NOLOCK)
GROUP BY            Database_Name, 
                    FilingDate
DECLARE @PivotColumnHeaders varchar(MAX)
SELECT @PivotColumnHeaders =
  COALESCE(
    @PivotColumnHeaders + ',[' + CAST(UC.FilingDate AS NVARCHAR(10)) + ']',
    '[' + CAST(UC.FilingDate AS NVARCHAR(10)) + ']'
  )
FROM (SELECT FilingDate FROM #T1 GROUP BY FilingDate) UC

DECLARE @PQuery varchar(MAX) = '
SELECT * FROM (SELECT Database_Name, FilingDate, Total FROM #T1 T0) T1
PIVOT (SUM([Total]) FOR FilingDate IN (' + @PivotColumnHeaders + ') ) AS P'
EXECUTE (@PQuery)

DROP TABLE #T1
...