0
我需要動態表#table從這個格式轉換數據:SQL服務器 - 動態透視變換數據
spot_id name pct ------- ---- --- 1 A 2 1 B 8 1 C 6 2 A 4 2 B 5 3 A 5 3 D 1 3 E 4
到:
spot_id A B C D E ------- --- --- --- --- --- 1 2 5 6 0 0 2 4 5 0 0 0 3 5 0 0 1 4
的事情是,我不知道提前什麼列「名稱」的值是多少或他們有多少,所以我認爲我必須使用某種動態SQL主控
只是想出瞭如何解決這個問題:
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT ',' + QUOTENAME(name) from (SELECT DISTINCT name FROM #table) T FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = N'SELECT spot_id,' + @cols + N' from ( select spot_id, name, pct from #table ) as x pivot ( max(pct) for name in (' + @cols + N') ) as p ' exec sp_executesql @query;
如果有更優雅的方式做同樣的?
謝謝,但它並不能幫助我很多,因爲就像我寫的 「名稱」 列的值(A,B,C,d)是動態我不知道他們是什麼。它必須在某種程度上是動態的 – user2822455
仍然無法幫到我..「名稱」列的值是動態的..我只是想出了答案。我會在我的問題 – user2822455
中發佈它,請參閱動態查詢@ user2822455 – mohan111