SQL PIVOT SELECT FROM LIST (IN SELECT)

Возможно ли сделать 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?

Ответ 1

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

Ответ 2

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

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)