我有一份报告,它是在SSRS 2005中开发的,我使用存储过程从数据库中获取结果。报告输出的结果非常简单,如下图所示。
如果我想我正在寻找不同的会员 例如: -
MemberID
c108
c109
c110
...
如下图所示。 因此,对于每个成员,有各种用户,并且对于每个用户,将有各种ROLES。
但我需要一行如下所示。
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行,那么我必须能够轻松修改查询。请建议我。非常感谢你花时间阅读和理解我的问题。
答案 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