可能重复:
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