Ответ 1
Если динамический SQL отсутствует, я боюсь, что ответ отрицательный, это невозможно. Парсер должен знать значения перед фронтом, чтобы выполнить поворот к столбцам.
Возможно ли сделать 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?
Если динамический SQL отсутствует, я боюсь, что ответ отрицательный, это невозможно. Парсер должен знать значения перед фронтом, чтобы выполнить поворот к столбцам.
Это можно сделать.
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)