2つの集計関数の値に基づいてテーブルからレコードをプルするSQLクエリの作成に取り組んでいます。これらの集計関数は、同じテーブルからデータを取得していますが、フィルター条件が異なります。私が遭遇した問題は、SUMの結果が、SUM関数を1つだけ含めた場合よりもはるかに大きくなることです。一時テーブルを使用してこのクエリを作成できることは知っていますが、単一のクエリのみを必要とする洗練されたソリューションがあるかどうか疑問に思っています。
この問題を示すために、簡略化されたバージョンを作成しました。テーブルの構造は次のとおりです。
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
任意の洞察をいただければ幸いです。