Я работаю над созданием SQL-запроса, который будет извлекать записи из таблицы на основе значения двух агрегатных функций.Эти агрегатные функции извлекают данные из одной и той же таблицы, но с разными условиями фильтрации.Проблема, с которой я сталкиваюсь, заключается в том, что результаты SUM намного больше, чем если бы я включал только одну функцию SUM.Я знаю, что могу создать этот запрос, используя временные таблицы, но мне просто интересно, есть ли элегантное решение, требующее только одного запроса.
Я создал упрощенную версию, чтобы продемонстрировать проблему.Вот структуры таблиц:
EMPLOYEE TABLE
EMPID
1
2
3
ABSENCE TABLE
EMPID DATE HOURS_ABSENT
1 6/1/2009 3
1 9/1/2009 1
2 3/1/2010 2
А вот запрос:
SELECT
E.EMPID
,SUM(ATOTAL.HOURS_ABSENT) AS ABSENT_TOTAL
,SUM(AYEAR.HOURS_ABSENT) AS ABSENT_YEAR
FROM
EMPLOYEE E
INNER JOIN ABSENCE ATOTAL ON
ATOTAL.EMPID = E.EMPID
INNER JOIN ABSENCE AYEAR ON
AYEAR.EMPID = E.EMPID
WHERE
AYEAR.DATE > '1/1/2010'
GROUP BY
E.EMPID
HAVING
SUM(ATOTAL.HOURS_ABSENT) > 10
OR SUM(AYEAR.HOURS_ABSENT) > 3
Любая идея будет принята с благодарностью.