Сводная таблица SQL-Server с установленными столбцами - PullRequest
0 голосов
/ 26 сентября 2018

Я уже некоторое время борюсь с этим, потому что не могу найти запрос, который позволяет поворачивать один столбец без второго столбца ссылки / идентификатора.

Моя текущая таблица выглядит так, как показано:

Y1M1 Y1M2  Y1M3   Y1M4   Y1M5
-----------------------------
0    NULL  NULL   NULL   NULL
125  NULL  NULL   NULL   NULL
250  NULL  NULL   NULL   NULL
500  NULL  NULL   NULL   NULL
750  NULL  NULL   NULL   NULL

Когда я хочу повернуться к чему-то похожему на:

Y1M1  Y1M2  Y1M3  Y1M4  Y1M5
-----------------------------
0     125   250   500   750

Отчасти из-за сложностиpivot и частично удивительное отсутствие руководств по повороту одного столбца.

SELECT *
FROM 
  (SELECT [Y1M1]
   FROM @Result) AS SourceTable
PIVOT
  (MAX([Y1M1])
  FOR [Y1M1]
  IN ([Y1M2],[Y1M3],[Y1Q1],[Y1M4],[Y1M5])) AS PivotTable

Однако этот запрос возвращает все значения NULL, и я не могу добавить столбец [Y1M1] вПредложение IN без выдачи ошибки при выполнении.Аналогично, варианты запроса, использующие UNPIVOT, также оказались сложными для успешного выполнения.

Буду признателен за любые рекомендации относительно запросов PIVOT

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Если вы используете CTE или подзапрос для получения вывода, подобного этому:

**Name  Value**
Y1M1    0
Y1M2    125
Y1M3    250
Y1M4    500
Y1M5    750

Тогда вы можете просто сделать обычную сводную таблицу для этой производной таблицы.

0 голосов
/ 26 сентября 2018

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

SELECT Y1M1=[1],Y1M2=[2],Y1M3=[3],Y1M4=[4],Y1M5=[5]
FROM 
  (SELECT Y1M1, RN=ROW_NUMBER() OVER (ORDER BY Y1M1)
   FROM @Result) AS SourceTable
PIVOT
(
    MAX(Y1M1)
    FOR RN IN ([1],[2],[3],[4],[5])
) 
AS PivotTable
...