Я хотел бы оптимизировать запрос Oracle для преобразования таблицы со всеми значениями авторизованной пары в два столбца.Первый за исключением разрешенных по умолчанию, а второй за исключением запрещенных по умолчанию.
Например:
| ROOM | USER AUTHORIZED |
| ROOM1 | A |
| ROOM2 | A |
| ROOM2 | B |
| ROOM3 | B |
| ROOM4 | B |
| ROOM5 | B |
| ROOM2 | C |
| ROOM3 | C |
| ROOM4 | C |
Кому:
ROOM | USER EXCEPTION AUTHORIZED | USER EXCEPTION FORBIDDEN |
ROOM1| A | B;C
ROOM2| A |
ROOM3| |
ROOM4| |
ROOM5| | C
Я использовал этот запрос, чтобы получить исключение:
WITH USERS
AS( SELECT USER FROM ROOM_USERS GROUP BY USER HAVING count(*)>(SELECT count(*)/2 FROM ROOM_USERS )),
ROOMS
AS( SELECT DISTINCT(ROOM) as room FROM ROOM_USERS)
SELECT ROOM, LISTAGG(USER, ';') WITHIN GROUP (ORDER BY USER)
FROM USERS, ROOMS
WHERE USERS.user||ROOMS.room NOT IN (
SELECT user||room
FROM ROOMS_USERS
)
GROUP BY room;