SQL过程将结果返回到一行

时间:2011-07-25 20:40:51

标签: sql sql-server sql-server-2005 tsql

我有一份报告,它是在SSRS 2005中开发的,我使用存储过程从数据库中获取结果。报告输出的结果非常简单,如下图所示。

如果我想我正在寻找不同的会员 例如: -

 MemberID
c108
c109
c110
...

如下图所示。 因此,对于每个成员,有各种用户,并且对于每个用户,将有各种ROLES。 enter image description here

但我需要一行如下所示。

MemberID  UserID    Roles
c108   22492   SystemOperator,ItemResearcher,Non-Decision Role,Security Administrator, Decisioning Administrator,Reporting,Corporate Administrator
c108   22469   SystemOperator,ItemResearcher,Non-Decision Role,Security Administrator,Decisioning Administrator

这样,每个用户的所有角色都可以在SSRS(报告)中的一行中以','分隔显示。

编写存储过程以生成结果的最简单方法是什么。

请注意: - 可能会有一些变化,如果我的老板希望我用','分隔一行也只需1行,那么我必须能够轻松修改查询。请建议我。非常感谢你花时间阅读和理解我的问题。

2 个答案:

答案 0 :(得分:2)

如果这是MySQL,您可以使用GROUP_CONCAT函数创建逗号分隔列表:

SELECT MemberID, UserID, GROUP_CONCAT(Role) AS Roles
FROM myTable
GROUP BY MemberID, UserID

然而,由于这是MSSQL,你需要伪造GROUP_CONCAT,如this

答案 1 :(得分:1)

如果您想要连接,那么您可能需要查看Jeff Moden的文章Performance Tuning: Concatenation Functions and Some Tuning Myths,该文章介绍了各种技术。

我通常会使用东西和XML路径(在文章中讨论)看起来大致如下:

SELECT t1.ID,        
   STUFF((SELECT ','+t2.datafield 
   FROM dbo.tablename2 t2 
                WHERE t1.ID = t2.ID FOR XML PATH('')),1,1,'')   
FROM dbo.TestData t1  
GROUP BY t1.ID