Проблема поворота (что мне не хватает)? - PullRequest
0 голосов
/ 08 октября 2019

Попытка развернуть данные и добавить вычисляемый столбец безрезультатно.

Я попробовал приложенный код ниже, но не могу получить именно то, что мне нужно.

Моя таблица состоит из трех столбцов

TABLE_NAME, REPORT_DATE, COUNT_ROWS

Для последних двух [REPORT_DATE] я пытаюсь отобразить в сводной области [COUNT_ROWS]за каждого [TABLE_NAME]

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

DECLARE @cols  AS NVARCHAR(MAX)='';
DECLARE @query AS NVARCHAR(MAX)='';

SELECT @cols = @cols + QUOTENAME(REPORT_DATE) + ',' FROM (select DISTINCT TOP 2 REPORT_DATE from account_report order by  REPORT_DATE desc) as tmp
select @cols = substring(@cols, 0, len(@cols)) --trim "," at end

set @query = 
'SELECT * from 
(select  [TABLE_NAME], [COUNT_ROWS] from account_report
) src
pivot 
(sum([COUNT_ROWS]) for [TABLE_NAME] in (' + @cols + ')
) piv'

execute(@query)

Все, что я получаю из сценария, это результат двух столбцов двух [REPORT_DATE] с1 строка с нулевыми значениями (хотя мои данные содержат строки)

1 Ответ

0 голосов
/ 08 октября 2019

Могу поспорить, что вы пытаетесь получить из запроса следующее:

SELECT * from 
(select  [TABLE_NAME], [COUNT_ROWS], [REPORT_DATE] from account_report
) src
pivot 
(sum([COUNT_ROWS]) for [REPORT_DATE] in (' + @cols + ')
) piv

И наоборот, если вы действительно хотите, чтобы имя отчета выталкивалось по столбцам, вам нужно настроить переменную @cols.

SELECT @cols = @cols + QUOTENAME(TABLE_NAME) + ',' FROM (select DISTINCT TOP 2 TABLE_NAME ,REPORT_DATE from account_report order by  REPORT_DATE desc) as tmp
select @cols = substring(@cols, 0, len(@cols)) --trim "," at end

set @query = 
'SELECT * from 
(select  [REPORT_DATE], [TABLE_NAME], [COUNT_ROWS] from account_report 
) src
pivot 
(sum([COUNT_ROWS]) for [TABLE_NAME] in (' + @cols + ')
) piv'

execute(@query)
...