2012-09-11 120 views
1

我有一個列表Category, Date, Monthly_RevenueT-SQL查詢選擇最近3個月的數據,去年的月份,本月的平均值和所有月份的平均值

我需要一個查詢,將選擇Todays_MonthLast_Month,2個月前,Last_years_Month,平均當今月,平均各月。

此查詢需要按類別分組。

例子:

Category | Sept, 2012 | Aug, 2012| Jul, 2012 | Sept, 2011 | Average of Sept | Avg all Mo 

是相當新的SQL我還沒有得到它。我想知道有沒有人可以對此採取措施。謝謝。

的樣本數據

'Burger' '9/1/2012' '500' 
'Fries' '10/1/2012 '300' 
'Burger' '6/1/2011' '250' 
+1

發佈一些示例數據和預期的結果將是非常有益! – Taryn

+0

感謝您的提示。我會去做。 –

+2

Scott Weiland會爲你感到驕傲,如果你首先在一些示例查詢中採取行動:)看看[datediff](http://social.msdn.microsoft.com/Forums/en/transactsql/thread/5e5a4474-31b8- 4316-8a34-1e4a5572fb49),[group by](http://www.tizag.com/sqlTutorial/sqlgroupby.php)和[avg](http://msdn.microsoft.com/zh-cn/library/ms177677的.aspx)。 – paulsm4

回答

1

你需要的東西沿着這些路線。不最佳的解決方案,但會給你一個開始 。這是一個靜態的解決方案,但它看起來像你可能需要一個動態的解決方案

*沒有測試

SELECT 
Category 
,[Sep 2012]=SUM(CASE WHEN YEAR(TranDate)= YEAR(GETDATE()) AND MONTH(TranDate)= MONTH(GETDATE()) THEN Amount ELSE NULL END) 
,[Aug 2012]=SUM(CASE WHEN YEAR(TranDate)= YEAR(DATEADD(month,-1,GETDATE())) AND MONTH(TranDate)= MONTH(DATEADD(month,-1,GETDATE())) THEN Amount ELSE NULL END) 
,[Jul 2012]=SUM(CASE WHEN YEAR(TranDate)= YEAR(DATEADD(month,-2,GETDATE())) AND MONTH(TranDate)= MONTH(DATEADD(month,-2,GETDATE())) THEN Amount ELSE NULL END) 
,[AVG Sep 2012]=AVG(CASE WHEN YEAR(TranDate)= YEAR(GETDATE()) AND MONTH(TranDate)= MONTH(GETDATE()) THEN Amount ELSE NULL END) 
,[AVG 12 months]=AVG(CASE WHEN TranDatee > CAST(DATEADD(year,-1,GETDATE()) AS DATE) THEN Amount ELSE NULL END)/12 
FROM Table1 
GROUP BY Category,Amount 
+0

謝謝clearlogic。我像蝸牛那樣朝着這個方向前進。你爲我確認了它。 –