可能重複:
Is there a way to create a SQL Server function to "join" multiple rows from a subquery into a single delimited field?SQL動態列查詢
我有 「事件」 的表,每個事件都有1-4(主要是變量#)AA名單「用戶」。假設我今天收到了所有事件,然後我想將用戶列爲動態列數,而不是重複行。
現在我有
SELECT E.EventID, E.Time, U.Name FROM Events
INNER JOIN Users U ON E.UserID = U.UserID
WHERE Date = '12/20/2010'
這使我產生這樣的:
EventID, Time, Name
211, '4:00am', 'Joe'
211, '4:00am', 'Phil'
211, "4:00am', 'Billy'
218, '7:00am', 'Sally'
218, '7:00am', 'Susan'
我可以用這個工作,這是可以接受的,但是對於事件ID和時間的重複(有更多的列我的實際查詢)對我來說似乎很浪費。我真的會在輸出喜歡的是這樣的:
EventID, Time, Name1, Name2, Name3
211, '4:00am', 'Joe', 'Phil', 'Billy'
218, '7:00am', 'Sally', 'Susan', NULL
我試圖尋找教程樞軸(我有SQL 2008),但我不知道他們是否匹配概念什麼,我試圖做。他們大多數使用「MIN」或「MAX」。
也許這不能做?我的另一種選擇是獲取今天的事件列表,然後循環查找該事件的用戶記錄集。我寧願在一個查詢中抓住它。
任何想法?
你可以改變表的模式嗎?我會在'Events'中存儲'EventID Time Name1 Name2 Name3',然後在每個用戶擁有的eventID上做一個簡單的選擇。用戶可能有多個事件,而eventID則是外鍵。 – Robert 2010-12-20 22:37:37
讓我想起MySQL的GROUP_CONCAT()。這個問題w.r.t. MSSQL的幫助? http://stackoverflow.com/questions/273238/how-to-use-group-by-to-concatenate-strings-in-mssql – Riedsio 2010-12-20 22:38:26
您可以將名稱一起合併到單個分隔列中。所以你會得到: EventID,Time,Names 211,'4:00 am','Joe,Phil,Billy' – Adam 2010-12-20 22:46:19