web-dev-qa-db-ja.com

SQL PIVOT SELECT FROM LIST(IN SELECT)

単一の値を使用する代わりに、ピボットを実行してテーブルからリストを選択することは可能ですか?

このように(誤った構文エラー):

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を使用せずにこれを行う方法はありますか?

14
live-love

動的SQLが出ている場合、答えはノーだと思います。それはできません。パーサーは、列へのピボットを実行するために、事前に値を知る必要があります。

11
Yuck

できます。

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)
4
Krunal Savani