我的桌子有以下字段。
现在每个用户在表中有3个区域(因此有3个条目用于具有不同区域的USERid)。
我需要输出如下:
现在在报告中我想显示USERID和所有区域,其逗号分隔与其UserID相关联,如上所述。
我尝试使用group by但我没有找到任何帮助。
答案 0 :(得分:4)
对于MS-SQL Server 2008,您可以使用以下XML hack。
SELECT DISTINCT t.USERID, REPLACE((
SELECT Area AS 'data()'
FROM table1 a
WHERE a.USERID = t.USERID
FOR XML path('')
), ' ', ', ') AS Areas
FROM table1 t
更好一点是使用STUFF
而不是REPLACE
SELECT DISTINCT t.USERID, STUFF((
SELECT Area AS 'data()'
FROM table1 a
WHERE a.USERID = t.USERID
FOR XML path('')
) , 1, 1, '') AS Areas
FROM table1 t
如果您有很多功能需要使用它并且存在性能问题,那么最好查看 GROUP_CONCAT string aggregate for SQL Server 。 这是一个T_SQL函数,您可以从CodePlex here下载它。
答案 1 :(得分:0)
对于MySQL,您可以按USERID
对结果进行分组,然后使用GROUP_CONCAT
连接组中的所有Area
。像这样:
SELECT USERID, GROUP_CONCAT(Area) FROM table1 GROUP BY USERID;
对于SQL Server,您可能需要查看Simulating GROUP_CONCAT MySQL function in SQL Server?
答案 2 :(得分:0)
选择UserID,Area =(SELECT Area +','
来自#table1 A1
其中A.UserID = A1.UserID
FOR XML PATH('')
)
来自#table1 A.
GROUP BY A.UserID