[英]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 BY
和ORDER 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.