Столбцы перевернуты из-за порядка ПО инструкции

#oracle

#Oracle

Вопрос:

Я работаю над отчетом со следующим кодом:

 SELECT SUBS_PROV "PROV", SUM(PAID_AMT), 0, 0, 0, SUM(PAID_AMT)
FROM H 
WHERE GRP = :P_POLICY AND 
amp;P_DATE BETWEEN :P_FROM_DATE AND :P_TO_DATE 
GROUP BY SUBS_PROV
UNION ALL

SELECT PROV "PROV", 0, SUM(PAID_AMT), 0, 0, SUM(PAID_AMT)
FROM D
WHERE GRP = :P_POLICY AND 
amp;P_DATE BETWEEN :P_FROM_DATE AND :P_TO_DATE 
GROUP BY PROV
UNION ALL

SELECT PROV "PROV", 0, 0, SUM(PAID_AMT), 0, SUM(PAID_AMT)
FROM E
WHERE GRP = :P_POLICY AND 
amp;P_DATE BETWEEN :P_FROM_DATE AND :P_TO_DATE 
GROUP BY PROV
UNION ALL

SELECT SUBS_PROV "PROV", 0, 0, 0, SUM(PAID_AMT), SUM(PAID_AMT)
FROM R 
WHERE GRP = :P_POLICY AND 
amp;P_DATE BETWEEN :P_FROM_DATE AND :P_TO_DATE 
GROUP BY SUBS_PROV
 

В этом запросе в модели данных есть столбец TOTAL, и я должен добавить «ORDER BY», потому что в Oracle 11g group by больше не работает.

Когда я добавляю «ПОРЯДОК ПО 1» в самом конце и запускаю отчет, он меняет итоговые значения H на итоговые значения столбца TOTAL. Есть ли способ добавить ПОРЯДОК без изменения этих столбцов?

Спасибо!

Комментарии:

1. «в Oracle 11g group by больше не работает» — ошибка?

2. Я могу подтвердить после эмпирического тестирования, что GROUP BY действительно работает в 11g. Поэтому вы должны использовать его, который не работает в 11g.

3. @Ollie — Я подозреваю, что проблема в том, что GROUP BY использует более эффективный алгоритм хеширования в 11g (и работает с 10g), что означает, что результаты больше не сортируются по агрегирующим столбцам. В то время как в более ранних версиях Oracle GROUP BY возвращал отсортированные результаты. В документах это указано как побочный эффект дизайна, на который нельзя полагаться: только ORDER BY гарантирует порядок сортировки. Однако на практике GROUP BY сделала свое дело, поэтому многие люди полагались на это и не беспокоились о дополнительной сортировке. Отсюда и шок, когда «под Oracle 11g group by больше не работает».

4. APC, я знаю, я просто высказал точку зрения.

Ответ №1:

Вы должны добавлять ORDER BY после каждого GROUP BY , а не только в конце.