按顺序在sql中按月和年排序

Bru*_*uce 12 sql sql-server

我有一个存储过程,select语句是:

SELECT     { fn MONTHNAME(OrderDate) } AS MonthName, YEAR(OrderDate) AS Year, SUM(TotalValue) AS Profits
FROM         [Order]
WHERE     (YEAR(OrderDate) = @year)
GROUP BY { fn MONTHNAME(OrderDate) }, YEAR(OrderDate)
Run Code Online (Sandbox Code Playgroud)

这显示了每个月的总和但我需要按月和年订购结果因为我的结果显示如下:

April 2013 
February 2013 
January 2013 
June 2013 
March 2013 
May 2013 
Run Code Online (Sandbox Code Playgroud)

在这种情况下,解决方案是什么?

Bob*_*ale 13

试试这个:

SELECT     { fn MONTHNAME(OrderDate) } AS MonthName, YEAR(OrderDate) AS Year, SUM(TotalValue) AS Profits
FROM         [Order]
WHERE     (YEAR(OrderDate) = @year)
GROUP BY { fn MONTHNAME(OrderDate) }, MONTH(OrderDate), YEAR(OrderDate)
order by Year(orderDate),month(OrderDate)
Run Code Online (Sandbox Code Playgroud)

请注意,您需要将您订购的任何字段添加到group by子句中


use*_*394 8

只需添加

Order by max(OrderDate) 
Run Code Online (Sandbox Code Playgroud)

在最后。

SELECT     { fn MONTHNAME(OrderDate) } AS MonthName, YEAR(OrderDate) AS Year,     SUM(TotalValue) AS Profits
FROM         [Order]
WHERE     (YEAR(OrderDate) = @year)
GROUP BY { fn MONTHNAME(OrderDate) }, YEAR(OrderDate)
Order by max(OrderDate) 
Run Code Online (Sandbox Code Playgroud)

现在介绍一下它是如何工作的:

如果您分别按月、年排序,则会按字母顺序按月份升序排列(四月在一月之前)。如果您按订单日期订购,则 ID 将根据日期值进行排序,当然日期值是按月/年排序的。