Гул ... Альтернативное предложение со стандартным SQL.
Имейте CODE_WEIGHT
таблицу, такую как:
CODE WEIGHT
T 3
E 2
F 1
Затем сгруппируйте запрос по Person (если это критерий группировки) и выберите отдельный код, содержащий max(weight)
.
Я отправлю запрос через пару минут.
UPDATE
Хорошо, извините за задержку.
Вот решение с использованием предыдущей указанной таблицы и трюка @Randy:
SELECT
pp.person, decode(max(c.weight), 3, 'T', 2, 'E', 1, 'F', '') code
FROM
person pp INNER JOIN code_weight c on (pp.code = c.code)
GROUP BY
pp.person
ORDER BY
person DESC;
Я почти уверен, что есть способ избавиться от проприетарной функции Oracle и добиться цели в чистом SQL ... Во всяком случае, поскольку вы запросили решение Oracle, вот оно.
ОБНОВЛЕНИЕ 2
И, как и было обещано, вот лучшая стандартная версия SQL, которую я смог придумать:
SELECT
p.person, c.code
FROM
(
SELECT
pp.person, MAX(cc.weight) weight
FROM
person pp INNER JOIN code_weight cc ON (pp.code = cc.code)
GROUP BY
pp.person
) p INNER JOIN code_WEIGHT c ON (p.weight = c.weight)
ORDER BY
p.person DESC;
Как-то безобразно с двумя соединениями ... Но это делает работу без проприетарных расширений. Любой гуру SQL знает, как его оптимизировать?
Приветствия