2013-02-15 74 views
0

以下查询给出了两个结果,其中除最后一列v2_roles.id外,所有内容都相同。有没有办法将它们分组在一列(可以是逗号seprated列表),得到的只是一个结果回将一行中的多行结果分组在一列

SELECT v2_admin.adminid, 
     v2_admin.adminname, 
     v2_admin.login, 
     v2_admin.email, 
     v2_roles.id 
FROM v2_admin 
     INNER JOIN v2_admin_roles 
       ON v2_admin.adminid = v2_admin_roles.adminid 
     INNER JOIN v2_roles 
       ON v2_admin_roles.roleid = v2_roles.id 
WHERE v2_admin.adminid = 2 
+1

哪个RDBMS ....? – sgeddes 2013-02-15 15:07:22

+0

Soory错过了MSSQL 2008 – nasaa 2013-02-15 15:09:09

+1

提供样本数据以及您想要的结果。 – 2013-02-15 15:13:39

回答

1

这也应该工作,

;WITH mytable AS (
    SELECT v2_admin.adminid, 
     v2_admin.adminname, 
     v2_admin.login, 
     v2_admin.email, 
     v2_roles.id 
    FROM v2_admin 
     INNER JOIN v2_admin_roles 
       ON v2_admin.adminid = v2_admin_roles.adminid 
     INNER JOIN v2_roles 
       ON v2_admin_roles.roleid = v2_roles.id 
    WHERE v2_admin.adminid = 2 
) 

SELECT t1.adminid,t1.adminname, t1.login, t1.email, 
     roleIds =REPLACE((SELECT convert(varchar,id) AS [data()] 
       FROM mytable t2 
       WHERE t2.adminid = t1.adminid 
       --ORDER BY t2.adminid 
       FOR XML PATH('') 
      ), ' ', ' , ') 
FROM mytable t1 
GROUP BY t1.adminid,t1.adminname, t1.login, t1.email ; 
+0

谢谢。那按预期工作 – nasaa 2013-02-15 15:17:58

+0

没问题!..... – Kaf 2013-02-15 15:19:51

1

这是使用FOR XML到外地转换到一个列表的小动作和STUFF删除开始逗号 - 这应该是接近(未经测试):

SELECT v2_admin.adminid, 
     v2_admin.adminname, 
     v2_admin.login, 
     v2_admin.email, 
     STUFF(
     (
      SELECT ',' + CAST(v2_roles.id as varchar) AS [text()] 
       FROM v2_roles 
       WHERE v2_admin_roles.roleid = v2_roles.id 
      ORDER BY v2_roles.id 
      FOR XML PATH('') 
     ), 1, 1, '') AS Roles 
FROM v2_admin 
     INNER JOIN v2_admin_roles 
       ON v2_admin.adminid = v2_admin_roles.adminid 
WHERE v2_admin.adminid = 2 
GROUP BY v2_admin.adminid, 
     v2_admin.adminname, 
     v2_admin.login, 
     v2_admin.email 
+0

谢谢你,但它给错误 - 将varchar值',' 转换为数据类型int时转换失败。 – nasaa 2013-02-15 15:15:32

+0

投你的Roles.Id - 一秒钟,我会编辑... – sgeddes 2013-02-15 15:16:31

+0

@nasaa - 请参阅编辑 - 你只需要将你的int投给varchar - 祝你好运! – sgeddes 2013-02-15 15:19:06