T-SQL查询选择最近3个月的数据,去年的月份,本月的平均值和所有月份的平均值

时间:2012-09-11 22:25:20

标签: sql tsql common-table-expression

我有一个包含Category, Date, Monthly_Revenue列的表格。

我需要一个查询,选择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 个答案:

答案 0 :(得分: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