1

我有一个带有列的表Category, Date, Monthly_Revenue

我需要一个查询,它将选择Todays_Month, Last_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'
4

1 回答 1

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
于 2012-09-11T23:18:09.823 回答