繁体   English   中英

在Sql Server 2008中Order by子句不起作用

[英]In Sql Server 2008 Order by clause is not working

我已经查询

SELECT Datename(MM, CONVERT(DATE, created_date))           AS open_date, 
       Count(Datename(MONTH, CONVERT(DATE, created_date))) AS created_request 
FROM   usm_request 
WHERE  Datename(YEAR, CONVERT(DATE, created_date)) = Datename(YEAR, Getdate()) 
GROUP  BY Datename(MM, CONVERT(DATE, created_date)) 
ORDER  BY Datename(MM, CONVERT(DATE, created_date)) ASC 

并得到结果

 open_date  created_request

   April          4
   February      194
   January       540
   March         186

但是我们需要结果

  open_date  created_request

   January       540
   February      194
   March         186    
   April          4

请帮我。

问候

潘卡伊

DATENAME返回的字符串不是日期时间,因此按字典顺序排序。

您可以使用:

SELECT Datename(MM, CONVERT(DATE, created_date))           AS open_date, 
       Count(Datename(MONTH, CONVERT(DATE, created_date))) AS created_request 
FROM   usm_request 
WHERE  Datename(YEAR, CONVERT(DATE, created_date)) = Datename(YEAR, Getdate()) 
GROUP  BY  DATENAME(mm,created_date),
       DATEPART(yy, created_date), 
       DATEPART(mm, created_date)
ORDER  BY DATEPART(yy, created_date),
          DATEPART(mm, created_date)

...按年+月排序(如int )。 您还必须将它们包括在GROUP BY

但是,为什么将datetime列始终转换为Date DATENAME这样的方法似乎是多余的。 所以我在GROUP BYORDER BY省略了它。

您的ORDER BY子句收到一个字符串:月份的名称。 这就是为什么行按字母顺序排序。

尝试按实际日期表示进行订购:

ORDER BY CONVERT(DATE, created_date) ASC

SELECT * FROM(
SELECT Datename(MM, CONVERT(DATE, created_date))           AS open_date, 
       Count(Datename(MONTH, CONVERT(DATE, created_date))) AS created_request 
FROM   usm_request 
WHERE  Datename(YEAR, CONVERT(DATE, created_date)) = Datename(YEAR, Getdate()) 
GROUP  BY Datename(MM, CONVERT(DATE, created_date)) 
) a
ORDER  BY a.created_request desc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM