2016-08-09 207 views
0

我正试图在SQL中编写一个查询,计算当前每个月的订单总额(美元金额)。每月总订单的SQL查询

我的表被设置是这样的:

OrderID  OrderTotal  OrderDate 
5598745  85.70   2016-07-29 
5598744  184.75   2016-07-25 
5598743  847.50   2016-06-20 
5598742  50.00   2016-06-05 

所以我的查询应显示是这样的:

June $897.50 
July $270.45 
etc... 

我与这方面的工作没有成功:

SELECT 
    month(OrderDate) AS month_name, 
    SUM(OrderTotal) AS sum_of_month, 
    AVG(SUM(OrderTotal)) OVER() AS avg_sum 
FROM 
    [db].[dbo].[orders] 
WHERE 
    YEAR(OrderDate) = YEAR(GetDate()) 
+6

除非我失去了一些东西,你只需要添加一个'GROUP BY MONTH(订购日期)' – Siyual

+2

你需要它组按月 – ElenaDBA

回答

1

对于月份总和,您应该使用组

SELECT month(OrderDate) AS month_name, 
     SUM(OrderTotal) AS sum_of_month 
     AVG(OrderTotal) AS AVG_of_month 
FROM [db].[dbo].[orders] 
WHERE YEAR(OrderDate) = YEAR(GetDate()) 
GROUP BY month(OrderDate); 
+0

也选择和年级组以及:YEAR(OrderDate),month(OrderDate) – Beth

+0

@Beth谢谢... anwer已更新 – scaisEdge

+1

您需要将年份添加到select子句@scaisEdge – Beth

0

试试这个它可能工作

SELECT 
    month(OrderDate) AS month_name, 
    SUM(OrderTotal) AS sum_of_month, 
    AVG(SUM(OrderTotal)) OVER() AS avg_sum 
FROM 
    [db].[dbo].[orders] 
WHERE 
    YEAR(OrderDate) = YEAR(GetDate()) 
order by month(OrderDate) 
1

使用DATENAME()获取月份的名字

Declare @Table table (OrderTotal money,OrderDate Date) 
Insert into @Table values 
(85.70,'2016-07-29'), 
(184.75,'2016-07-25'), 
(847.50,'2016-06-20'), 
(50.00,'2016-06-05') 

Select MonthName=DateName(MM,OrderDate) 
     ,Total=sum(OrderTotal) 
    From @Table 
    Where Year(OrderDate) = Year(GetDate()) 
    Group By Month(OrderDate),DateName(MM,OrderDate) 
    Order By Month(OrderDate) 

返回

MonthName Total 
June  897.50 
July  270.45 
0

以下是每月计算总和的简单查询。

select datename(month, dateadd(month, month(OrderDate), 0) - 1) as month_name, 
    sum(OrderTotal) as sum_of_month 
    from Orders 
where year(OrderDate) = year(getdate()) 
group by month(OrderDate) 
order by month(OrderDate) 

看来你想要获得所有总和的平均值。我认为在这个表格中提出它并不是一个好主意。每行都会显示相同的数字。相反,我建议一个单独的查询:

select avg(t.month_sum) from 
    (select sum(OrderTotal) as month_sum from Orders 
    where year(OrderDate) = year(getdate()) 
    group by month(OrderDate) 
    ) as t