2015-10-15 54 views
0

我試圖從應用程序的用戶許可證構建報告。一個用戶可以擁有多個許可證如下圖所示:SQL Server - 將輸出顯示到列

user_name license name 
--------- ------------------------- 
toreilly GWM Generation Moneypoint 
toreilly GWM Generation Aghada 
toreilly GWM Generation Ardnacrusha 
toreilly GWM Asset Development 
toreilly GWM Generation Erne 
toreilly GWM Generation Dublin Bay Power 
toreilly GWM Generation Lough Ree Power 
toreilly GWM Generation Lee 

我想要做的是顯示只有一行輸出和幾個許可證名稱排成幾列是這樣的:

user_name  license name license name 
--------------- -------------------------- --------------------- 
toreilly GWM Generation Moneypoint GWM Generation Aghada 


你能幫助我嗎?

謝謝,布魯諾

+0

難道兩列就夠了嗎?一個用戶名和一個用逗號分隔的許可證名稱列表? –

+0

關注透視https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx – Reinard

+0

糾正我,如果我錯了,但要使用PIVOT你不需要一個聚合函數?我只是想要輸出。關於逗號分隔列表的問題是因爲這將使用將數據提取到excel的SSIS包自動執行,但由於用戶可以擁有許多許可證,因此會在Excel中截斷結果集。 –

回答

0

與MySQL f.e,你可以簡單地使用:

SELECT user_name group_concat(license) FROM licenses GROUP BY user_name 

這將與用戶名和許可證的昏迷分隔列表返回行。

MSQL不具備GROUP_CONCAT功能,所以你需要使用這樣的事情:

SELECT user_name, licenses=STUFF(
    (SELECT ','+licence FROM licenses WHERE user_name=X.user_name FOR XMLPATH('')) , 1 , 1 , '') 
FROM licenses X 
GROUP BY user_name 

未經測試和導向上this

編輯:這不是正如你所描述的那樣,因爲許可證現在在一列中,但最近我可以想到。

+0

問題是我避免使用逗號分隔的列表,因爲這將使用將數據提取到excel的SSIS包自動執行,但因爲用戶可以擁有許多許可證,所以它會在Excel中截斷結果集。 –