返回每月每日平均值与当月的总和

时间:2015-03-12 23:36:37

标签: sql-server

我想知道是否可以构建一个T-SQL查询,它返回每月总销售额和每日平均销售额 - 包括当月的适当平均值。

我得到的最接近的是:

SELECT CONVERT(CHAR(7), salesdate, 120) as [Month], 
 SUM(SalesPrice) as [Totals], 
 Max(DAY(EOMONTH(salesdate))), 
 SUM(SalesPrice)/Max(DAY(EOMONTH(salesdate))) 
FROM Sales
WHERE salesdate >= '1/1/2014' 
GROUP BY CONVERT(CHAR(7), salesdate, 120) 
ORDER BY [Month] 

除了当前月份的每日平均值之外,其他一切都很好 - 因为我用来计算每日平均值(每月销售额的总和/当月的天数)的公式夸大了本月的销售天数(除非它在该月的最后一天运行)。

显然,这可以拼凑成一个单独的查询,但是有没有人有必要的T-SQL mojo来建议它如何作为单个查询工作?

1 个答案:

答案 0 :(得分:1)

SELECT CONVERT(CHAR(7), salesdate, 120) as [Month]
     ,SUM(SalesPrice) as [Totals]
     ,Max(DAY(CASE WHEN (MONTH(salesdate) = MONTH(GETDATE())) 
                                     AND (YEAR(salesdate) = YEAR(GETDATE())) 
                             THEN GETDATE() 
                         ELSE EOMONTH(salesdate) END))
     ,SUM(SalesPrice)/Max(DAY( CASE WHEN (MONTH(salesdate) = MONTH(GETDATE())) 
                                     AND (YEAR(salesdate) = YEAR(GETDATE())) 
                             THEN GETDATE() 
                         ELSE EOMONTH(salesdate) END)) 
FROM Sales
WHERE salesdate >= '20140101'  --<-- Use ANSI DATE format YYYYMMDD 
GROUP BY CONVERT(CHAR(7), salesdate, 120) 
ORDER BY [Month]