【问题标题】:Find annual MAX and MIN per employee using quarterly data使用季度数据查找每位员工的年度 MAX 和 MIN
【发布时间】:2019-08-09 18:59:07
【问题描述】:

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

  • SalesQuotaKey (PK, int, NOT NULL)
  • 员工密钥(FK,int,NOT NULL)
  • DateKey (FK, int, NOT NULL)
  • 日历年(smallint,NOT NULL)
  • 日历季度(tinyint,NOT NULL)
  • 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 key 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

【问题讨论】:

  • 向我们展示一些示例表数据和预期结果 - 都是格式化文本,而不是图像。
  • 另一方面,如果您想按年份,似乎只需将年份添加到您的SELECTGROUP By。另外,您为什么要在同一列上将表连接到自身?这没有任何意义。
  • @Larnu 确实,加入没有意义,我的错。我不希望按年计算,我只想检索每个员工的最高和最低配额,这意味着它需要检索总和最高和最低的年份的 4 个季度配额的总和。
  • @jarlh 要求的样本数据和预期结果将真正帮助我们理解这里。

标签: sql sql-server


【解决方案1】:

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

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

【讨论】:

  • 这个干活!非常感谢!我似乎总是忘记在指定源表时可以使用特定的 select 语句。
  • 唯一需要了解的是如何排除数据中并非所有四个季度都存在的年份。
  • 错过了那部分。敬请关注。完成!
  • 谢谢!差不多了!。添加 HAVING 语句会导致 SQL 为 Min 和 Max 提供相同的值。
  • @YH93:查询正确。当员工只有一年的四个季度或所有这些年的总和相同时,MIN 可以等于 MAX。
猜你喜欢
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 2019-12-06
  • 1970-01-01
  • 2020-01-20
  • 1970-01-01
相关资源
最近更新 更多