2017-09-15 58 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