0

以下のクエリでは、最後の列 v2_roles.id 以外はすべて同じである 2 つの結果が得られます。それらを 1 つの列 (カンマ区切りのリストの場合もあります) にグループ化し、1 つの結果だけを取得する方法はありますか

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 
4

2 に答える 2

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 ;
于 2013-02-15T15:17:13.027 に答える
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
于 2013-02-15T15:13:44.190 に答える