【发布时间】:2010-04-16 16:52:22
【问题描述】:
我正在创建一个 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
任何见解将不胜感激。
【问题讨论】:
-
这有点令人困惑。根据给定的数据,您的预期结果是什么?
标签: sql sql-server tsql aggregate-functions