使用季度数据查找每位员工的年度最高和最低

时间:2019-03-19 09:40:39

标签: sql sql-server

我正在使用SQL Server中的数据库进行工作,该数据库包含以美元为单位的季度员工销售配额。我要从中检索信息的表包含以下列:

  • SalesQuotaKey(PK,整数,非空)
  • 员工密钥(FK,整数,非空)
  • DateKey(FK,int,NOT NULL)
  • 日历年(smallint,NOT NULL)
  • 日历季度(tinyint,非空)
  • SalesAmountQuota(金钱,非空)
  • 日期(日期时间,非空)

包含SalesAmountQuota的列显示季度配额。

下面列出的一个EmployeeID的样本数据和预期结果     Employeekey Datekey年份季度SalesAmountquota日期

1   272 20101229    2010    4   28000,00    2010-12-29 00:00:00.000
11  272 20110331    2011    1   7000,00 2011-03-31 00:00:00.000
21  272 20110701    2011    3   91000,00    2011-07-01 00:00:00.000
31  272 20110929    2011    3   140000,00   2011-09-29 00:00:00.000
41  272 20111229    2011    4   70000,00    2011-12-29 00:00:00.000
54  272 20120330    2012    1   154000,00   2012-03-30 00:00:00.000
68  272 20120630    2012    2   107000,00   2012-06-30 00:00:00.000
82  272 20120928    2012    3   58000,00    2012-09-28 00:00:00.000
96  272 20121228    2012    4   263000,00   2012-12-28 00:00:00.000
113 272 20130330    2013    1   116000,00   2013-03-30 00:00:00.000
130 272 20130630    2013    2   84000,00    2013-06-30 00:00:00.000
147 272 20130929    2013    3   187000,00   2013-09-29 00:00:00.000

emp键MaxSalesQuota MinSalesquota

 272    582000,00   28000,00

但是,我想创建一个概览,显示每个EmployeeID的有史以来最高的年度销售配额和有史以来最低的年度销售配额(仅适用于所有四个季度配额都包含一个值)

我使用下面的语句设法找到了每位员工有史以来最高和最低的季度销售报价,但是我很难创建一个检索每位员工的年度最高和最低报价的报表。 有人可以帮助我吗?非常感谢您的帮助。

SELECT A.EmployeeKey,
       MAX(A.SalesAmountQuota) as MaxQuota,
       Min(B.SalesAmountQuota) as MinQuota 
FROM FactSalesQuota A, FactSalesQuota B
WHERE A.SalesAmountQuota = B.SalesAmountQuota
GROUP BY A.EmployeeKey
ORDER BY A.EmployeeKey

1 个答案:

答案 0 :(得分:4)

有一个派生表,您可以在其中SUM()分配每个员工的年度配额,并使用HAVING子句来确保每年所有四个季度都在那里。然后选择最大和最小年度配额:

select EmployeeKey, max(YearQuota ), min(YearQuota)
from
(
    SELECT EmployeeKey, SUM(SalesAmountQuota) as YearQuota 
    FROM FactSalesQuota
    GROUP BY EmployeeKey, CalendarYear
    HAVING count(distinct CalendarQuarter) = 4 
) dt
group by EmployeeKey