2017-09-15 59 views
0

我需要计算过去5个月的平均值(APR,MAY,JUN,JUL,AUG)。我有两个分裂考虑:区域(总共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 

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

请协助您进行正确的计算,如果可能的话,您也可以为其查询。 结果应该是:

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

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

感谢

+0

'表看起来像this' ...你失去了我与'Months'列。 _Never_将日期存储为文本,在这种情况下,它甚至不是远程接近ISO日期的东西。它可能需要很多SQL日期杂技来回答你的问题。 –

+0

请关注桌面上的内容。数据已经被烹饪,这只是摘要 –

+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