Все поля, не входящие в предложение GROUP BY
, должны быть агрегированными выражениями, такими как AVG(...)
или SUM(...)
или MAX(...)
и т. Д.
Так что это неправильно:
SELECT RLS.RoleId, UIR.UserId, UIR.RoleId, USR.UserName
(...)
GROUP BY RLS.RoleId
потому что последние три выражения в SELECT
должны быть как-то агрегированы или добавлены в предложение GROUP BY
.
Это логично, потому что, указав GROUP BY RLS.RoleId
, вы говорите, что RLS.RoleId долженбыть уникальным в конечном результате, поэтому только одна строка на значение.Но для каждого RLS.RoleID может быть несколько значений для UIR.UserId, UIR.RoleId или USR.UserName.Поэтому вам нужно указать СУБД, что нужно сделать, чтобы сделать их одной строкой: среднее, максимальное, минимальное ... ИЛИ вы добавляете поля в предложение GROUP BY, чтобы не RLS.RoleID, а комбинация значений столбцов должны быть уникальными.Смотрите также этот пример .