2013-02-15 27 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