Запрос на переписывание с объединением таблиц, содержащим предложение GROUP BY - PullRequest
0 голосов
/ 22 марта 2019

Можно ли переписать следующий запрос

SELECT      CT.GROUP, CT.EMP_ID, HT.EFF_DT
FROM        CURR_TABLE CT
JOIN        (SELECT     GROUP, EMP_ID, MAX(EFF_DT) AS EFF_DT
            FROM        HIST_TABLE
            WHERE       STAT = 'A' 
            GROUP BY    GROUP, EMP_ID) HT ON CT.GROUP = HT.GROUP AND 
            CT.EMPID = HT.EMP_ID
WHERE       CT.GROUP = :1
AND         CT.EMP_ID = :2

таким образом, который похож на стиль CROSS JOIN?

SELECT table1.column1, table2.column2...
FROM  table1, table2 [, table3 ]

Причина в том, что я хочу создать такой запрос в Peoplesoft, а вышеперечисленное может быть достигнуто только путем создания отдельного представления для выбора с помощью предложения group by. Я хочу сделать это только в одном запросе без создания дополнительных представлений.

1 Ответ

1 голос
/ 22 марта 2019

Вы можете попробовать написать запрос как одноуровневое соединение с агрегацией:

SELECT
    CT.GROUP,
    CT.EMP_ID,
    MAX(HT.EFF_DT) AS EFF_DT
FROM CURR_TABLE CT
LEFT JOIN HIST_TABLE HT
    ON CT.GROUP = HT.GROUP AND
       CT.EMPID = HT.EMP_ID AND
       HT.STAT = 'A'
WHERE
    CT.GROUP = :1 AND
    CT.EMP_ID = :2
GROUP BY
    CT.GROUP,
    CT.EMP_ID;

Обратите внимание, что GROUP является зарезервированным ключевым словом SQL, и вам, возможно, придется избегать его с двойными кавычками, чтобы этот запрос (или вопрос в вашем вопросе) работал в Oracle.

...