В моем запросе есть CTE для ранжирования ролей для каждого пользователя.Вторая часть выбирает всех пользователей и объединяет каждую роль в новый столбец.
CTE объединяется на основе идентификатора, для выполнения запроса требуется вечность.
Любой совет с благодарностью!
WITH UserRoles AS
(
SELECT
ru.ID,
ru.EmailAddress,
r.RoleName,
RANK() OVER (PARTITION BY IdentityUserID ORDER BY UserRoleName) AS RoleNumber
FROM
Users ru
LEFT JOIN
User_Role r ON r.UserRoleID = ru.UserRoleID
WHERE
ru.UserID IS NOT NULL
)
SELECT
l.[LastName],
l.[FirstName],
(SELECT TOP 1 RoleName
FROM UserRoles
WHERE UserRoles.ID = l.ID AND RoleNumber = 1) AS Role1,
(SELECT TOP 1 RoleName
FROM UserRoles
WHERE UserRoles.ID = l.ID AND RoleNumber = 2) AS Role2,
(SELECT TOP 1 RoleName
FROM UserRoles
WHERE UserRoles.ID = l.ID AND RoleNumber = 3) AS Role3,
(SELECT TOP 1 RoleName
FROM UserRoles
WHERE UserRoles.ID = l.ID AND RoleNumber = 4) AS Role4,
(SELECT TOP 1 RoleName
FROM UserRoles
WHERE UserRoles.ID = l.ID AND RoleNumber = 5) AS Role5
FROM
[dbo].[UserLogins] l
WHERE
(SELECT TOP 1 UserRoleName
FROM UserRoles
WHERE UserRoles.ID = l.ID AND RoleNum = 1) IS NOT NULL