В настоящее время я пытаюсь имитировать функцию 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 |
не работает. результат отображает только одну роль для моего пользователя. – JamesP
@JamesP Проверьте мой обновленный ответ. Это решит вашу проблему. Я присоединился к столбцу «USERNAME», потому что я не знаю структуру таблицы. Поэтому вам нужно присоединиться к колонке 'USERID', если у вас есть. Изменить запрос WHERE 'UIR.UserId = UIR1.UserId' вместо' UIR.UserName = UIR1.UserName' –
он работает блестяще сейчас :) Если вы не возражаете, я хотел бы знать, что делает то, что в код, например, почему вы использовали MAX и STUFF, зачем использовать INNER JOIN и т. д. – JamesP