У меня есть 3 таблицы, представляющие «Пользователи», «Роли» и многие «многие ко многим» UsersInRoles »с ключами: UserId, RoleId;соответствующие столбцы: UserName, RoleName
В html-приложении администратора я хочу показать список всех пользователей и роли, в которых они находятся. Из SQL я пытаюсь создать один запрос, который будет возвращать этоИнформация.Список ролей должен быть разделен, чтобы я мог выполнять соответствующие манипуляции с презентацией (в зависимости от платформы презентации, например, заменить разделитель тегом BR).
Использование одного выбора для списка пользователей, а затем отдельного выбора для каждого пользователяполучить роли просто, но попытка создать единый выбор, который выводит нижеследующее, поставила меня в тупик.
UserId UserName Roles
------ -------- -----
1 user1 Admin,Guest,PowerUser
2 user2 Guest
3 user3
4 user4 PowerUser,Guest
Заранее спасибо,
--Ed
- EDIT -
теперь работает со следующим запросом (спасибо всем, особенно Raymund & его блог ):
WITH RolesList AS
(
SELECT u.UserName,
(
SELECT r.RoleName + ',' AS 'data()'
FROM Roles r
JOIN UsersInRoles ur ON ur.RoleId = r.RoleId
WHERE ur.UserId = u.UserId FOR XML PATH('')
) AS RolesCSV
FROM Users u
) SELECT UserName, LEFT(RolesCSV, LEN(RolesCSV)-1) AS RolesCSV FROM RolesList