三个因素之间的平均计算

时间:2017-09-15 11:39:32

标签: sql-server average

我需要计算过去5个月的平均值(APR,MAY,JUN,JUL,AUG)。我需要考虑2个分区:区域(总共6个区域)和状态(构建和流程之间)。目前数据是每周一次的格式,因此我将这几周的数据进行了四舍五入以获得月度数据。如何使用两个分割获得平均每月数字。该表看起来像这样:

Region|Orders|BuildStatus|Months
GP    |1     |Build      |APR
GP    |2     |Non-Build  |APR
GP    |1     |Build      |MAY
GP    |2     |Non-Build  |MAY
PD    |1     |Build      |APR
PD    |2     |Non-Build  |APR
PD    |1     |Build      |MAY
PD    |2     |Non-Build  |MAY

直到8月,它还与其他5个地区重复。

请协助正确计算,如果可能,您也可以建议查询。 结果应该是:

Region|Avg_Orders|BuildStatus
GP    |1         |Build
GP    |2         |Non-Build
PD    |1         |Build
PD    |2         |Non-Build

平均数字应该是5个月的平均数。

由于

1 个答案:

答案 0 :(得分:0)

DECLARE @t TABLE(
  Region NVARCHAR(2)
 ,Orders INT
 ,BuildStatus NVARCHAR(100)
 ,Months NVARCHAR(3)
)

INSERT INTO @t VALUES
('GP', 1,'Build',      'APR')
,('GP', 2,'Non-Build',  'APR')
,('GP', 1,'Build',      'MAY')
,('GP', 2,'Non-Build',  'MAY')
,('PD', 1,'Build',      'APR')
,('PD', 2,'Non-Build',  'APR')
,('PD', 1,'Build',      'MAY')
,('PD', 2,'Non-Build',  'MAY');


WITH cteAgg AS(
  SELECT t.Region, t.BuildStatus, SUM(t.Orders) Orders, COUNT(DISTINCT t.Months) MonthsCount
  FROM @t t
  GROUP BY t.Region, t.BuildStatus
)
SELECT Region, Orders/MonthsCount AS Avg_Orders, BuildStatus
  FROM cteAgg
  ORDER BY 1