2016-08-09 206 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