SQL PIVOT ВЫБРАТЬ ИЗ СПИСКА (IN SELECT) - PullRequest
13 голосов
/ 19 мая 2011

Можно ли сделать PIVOT и выбрать список из таблицы вместо использования отдельных значений?

Вот так (неверная синтаксическая ошибка):

SELECT *
FROM (
    SELECT RepID, MilestoneID, ResultID FROM RM
) AS src
PIVOT (
    MAX(ResultID) FOR MilestoneID IN  (SELECT id FROM m) 
) AS pvt

Этот компилируется,но у меня не работает:

SELECT *
FROM (
    SELECT RepID, MilestoneID, ResultID FROM RM
) AS src
PIVOT (
    MAX(ResultID) FOR MilestoneID IN  ([1], [2], [3], [4]) 
) AS pvt

PS: Я НЕ хочу использовать динамический SQL, есть ли способ сделать это без использования динамического SQL?

Ответы [ 2 ]

11 голосов
/ 19 мая 2011

Если динамический SQL отсутствует, то, боюсь, ответ - нет, это невозможно сделать. Синтаксическому анализатору необходимо знать значения заранее, чтобы выполнить поворот к столбцам.

4 голосов
/ 11 июня 2012

Это можно сделать.

DECLARE @idList varchar(500)
SET @idList = COALESCE(@idList + ',', '') + id
FROM m


DECLARE @sqlToRun varchar(1000)
SET @sqlToRun = '
SELECT * 
FROM ( 
    SELECT RepID, MilestoneID, ResultID FROM RM 
) AS src 
PIVOT ( 
    MAX(ResultID) FOR MilestoneID IN  ('+ @idList +')  
) AS pvt'   

EXEC (@sqlToRun)
...