簡體   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