使用相同的UserId以逗号分隔获取数据

时间:2015-10-12 06:11:18

标签: sql-server sql-server-2008

我的桌子有以下字段。

  • ID = Bigint(PK)
  • USERID = bigint
  • Area = Varchar(50)

现在每个用户在表中有3个区域(因此有3个条目用于具有不同区域的USERid)。

enter image description here

我需要输出如下:

enter image description here

现在在报告中我想显示USERID和所有区域,其逗号分隔与其UserID相关联,如上所述。

我尝试使用group by但我没有找到任何帮助。

3 个答案:

答案 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