Это работает в MS Access (и очень похоже на то, что будет работать в Oracle и других базах данных) :
SELECT
un.user,
un.role,
(
SELECT COUNT(*)
FROM (
SELECT un1.user, un1.role
FROM [Unique] un1 group by user, role
)
)
FROM [Unique] un group by user, role;
Вот фактический синтаксис Oracle:
SELECT
un."user",
un.role,
(
SELECT COUNT(*)
FROM (
SELECT un1."user", un1.role
FROM "Unique" un1 group by "user", role
)
)
FROM "Unique" un group by "user", role;
Для справки приведено специальное решение для SQL Server, использующее CTE :
WITH Q([user], role) AS (
SELECT un.[user], un.role
FROM [Unique] un group by [user], role
)
SELECT *, (SELECT COUNT(*) FROM Q)
FROM Q