2013-12-16 6 views
4

В настоящее время я пытаюсь имитировать функцию group_concat в MySQL для MSSQL. Я следил за форматами кода, найденными в here и here. Проблема в том, что когда я пытаюсь выполнить запрос, я получаю сообщение Ambiguous column name для моего столбца RoleID. Вот мой запрос:эмулировать group_concat в MSSQL, неоднозначное имя столбца?

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 | 

ответ

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 
+0

не работает. результат отображает только одну роль для моего пользователя. – JamesP

+0

@JamesP Проверьте мой обновленный ответ. Это решит вашу проблему. Я присоединился к столбцу «USERNAME», потому что я не знаю структуру таблицы. Поэтому вам нужно присоединиться к колонке 'USERID', если у вас есть. Изменить запрос WHERE 'UIR.UserId = UIR1.UserId' вместо' UIR.UserName = UIR1.UserName' –

+0

он работает блестяще сейчас :) Если вы не возражаете, я хотел бы знать, что делает то, что в код, например, почему вы использовали MAX и STUFF, зачем использовать INNER JOIN и т. д. – JamesP

Смежные вопросы