2017-09-15 2 views
0

Ich muss den Durchschnitt der letzten 5 Monate (APR, MAI, JUN, JUL, AUG) berechnen. Ich habe 2 Splits zu berücksichtigen: Region (6 Regionen insgesamt) und Status (zwischen Build und Flow-Thru). Derzeit sind die Daten in einem wöchentlichen Format, also habe ich die Wochen aufgerundet, um monatliche Zahlen zu erhalten. Wie bekomme ich die durchschnittliche Monatsrate mit den beiden Splits? Die Tabelle sieht ungefähr so ​​aus:Durchschnittliche Berechnung zwischen drei Faktoren

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 

Es wiederholt mit 5 anderen Regionen bis August.

Bitte helfen Sie bei der korrekten Berechnung und wenn möglich, können Sie auch die Abfrage dafür vorschlagen. Das Ergebnis sollte sein:

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

Die Zahlen im Durchschnitt sollte der Durchschnitt der 5 Monate.

Dank

+0

'Die Tabelle etwas wie this' sieht ... verloren Sie mich mit der' Months' Spalte. _Never_ speichert Daten als Text, und in diesem Fall ist es nicht einmal etwas entfernt von einem ISO-Datum. Es wird wahrscheinlich eine Menge SQL-Datumsakrobatik benötigen, um Ihre Frage zu beantworten. –

+0

Bitte konzentrieren Sie sich auf was auf dem Tisch. Die Daten sind bereits fertig und das ist nur die Zusammenfassung –

+0

OK ... aber Sie sollten zumindest Beispieldaten aus der ursprünglichen Tabelle und der erwarteten Ausgabe zeigen. Dies sagt uns mehr als alles andere. –

Antwort

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 
Verwandte Themen