[英]Dynamic sql pivot values coming in seperate columns
嗨,我正在嘗試編寫動態數據透視表,因為我有 100 多列
ID Question Answer
1 Name peter
1 DOB 11/12/2003
1 address …..
1 Issue1 d
1 Issue2 a
2 Name sam
2 DOB 10/01/1998
2 address …..
2 Issue1 p
2 Issue2 f
我想要這樣的輸出:
ID Name DOB address Issue1 Issue2
1 peter 11/12/2003 …. d a
2 sam 10/01/1998 …. p f
這是我使用的代碼:-
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Question)
from #temp
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = N'SELECT ID + @cols + N'
from #temp
pivot
(
max([answer])
for Question in (' + @cols + N')
) p '
exec sp_executesql @query;
但是我在單獨的一行中得到每個答案。 我希望一個 ID 的所有答案都排成一行。 有人可以幫助我。 珍惜你在這方面的時間。 謝謝你。
我得到這樣的輸出,這不是我想要的。 我想要上面的輸出。
ID Name DOB address Issue1 Issue2
1 Peter
1 11/12/2003
1 …
1 d
1 a
看起來您正在尋找一種無需聚合即可根據您的表動態創建數據透視表的方法。 您可以嘗試以下操作:
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(Question)
FROM #TEMP
GROUP BY QUESTION
ORDER BY QUESTION
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT ID,' + @cols + ' FROM
(
SELECT ID, Question, Answer
FROM #TEMP
) x
pivot
(
MAX(Answer)
for Question in (' + @cols + ')
) p '
execute(@query);
預期輸出:
+----+---------+------------+--------+--------+-------+
| ID | address | DOB | Issue1 | Issue2 | Name |
+----+---------+------------+--------+--------+-------+
| 1 | ….. | 11/12/2003 | d | a | peter |
| 2 | ….. | 10/1/1998 | p | f | sam |
+----+---------+------------+--------+--------+-------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.