単一の値を使用する代わりに、ピボットを実行してテーブルからリストを選択することは可能ですか?
このように(誤った構文エラー):
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)