4

group_concat現在、MySQL の関数を MSSQLにシミュレートしようとしています。hereおよびhereにあるコード形式に従いました。問題は、クエリを実行しようとするとAmbiguous column name、 columnのメッセージが表示されることRoleIDです。これが私のクエリです:

select UserName, RoleID from tb_UserInRoles
cross apply(
    select RoleName from tb_Roles
    where tb_UserInRoles.RoleID = tb_Roles.RoleID
    for XML Path('')
) fxMerge (RoleID) group by UserName, RoleID

Ambiguous column nameこの特定のコード形式でエラー メッセージが表示される理由を知りたいです。このクエリを機能させて理解する必要があります。助けてくれてありがとう。

システムのユーザーが次のように複数のロールを持つことができる多対多の関係テーブルでこれを使用する予定です。

|  User  |   Role  |
|--------|---------|
| JamesP |  Maker  |
| JamesP | Approver|
| JamesP |  Admin  |

結果クエリを次のようにしたい:

|  User  |           Role           |
|--------|--------------------------|
| JamesP |  Maker, Approver, Admin  |
4

1 に答える 1

6

これを試して:

SELECT UIR.UserName, MAX(STUFF(fxMerge.RoleID, 1, 1, '')) 
FROM tb_UserInRoles UIR
CROSS APPLY(
    SELECT ',' + RoleName 
    FROM tb_UserInRoles UIR1 
    INNER JOIN tb_Roles RM ON UIR1.RoleID = RM.RoleID
    WHERE UIR.UserName = UIR1.UserName 
    FOR XML PATH('')
) fxMerge (RoleID) 
GROUP BY UIR.UserName
于 2013-12-16T05:48:25.870 に答える