簡體   English   中英

使用DATENAME函數時的SQL Server ORDER BY

[英]SQL Server ORDER BY when using DATENAME function

SELECT CAST(DATEPART(yyyy,DATE1) 
AS varchar (5)) + '-' + CAST(DATENAME(m,ec2.DATE2) 
AS varchar(3)) AS [Month],
CAST(AVG(CAST(DATEDIFF(day,DATE1, DATE2) 
AS DECIMAL(10,2))) AS DECIMAL(10,2)) AS tt
FROM tbl3
GROUP BY CAST(DATEPART(yyyy,DATE1) AS 
varchar (5)) + '-' + CAST(DATENAME(m,ec2.DATE2) 
AS varchar(3))
ORDER BY [Month]

因此,在上面的查詢中,我得到了2個不同年份的結果,因此以整數形式對年份進行排序,但是根據字母(作為其DATENAME )顯示Month的示例:

2013-Dec 4.45
2013-Nov 5.55
2014-Jan 2.35
2014-Jan 2-85

問題是我在聚合函數( Avg )中使用了DATE2 ,因此無法在ORDER BY子句中使用它。

任何人都有解決此問題的方法。 如果您能幫助我,我將非常感謝。 我閱讀了有關此問題的其他問題,但沒有找到解決方案。

提前致謝。

復雜的方式,但是在任何情況下都可以使用。 使用CTE解決您的問題,如下所示:

With CTE as (
SELECT CAST(DATEPART(yyyy,DATE1) 
AS varchar (5)) + '-' + CAST(DATENAME(m,ec2.DATE2) 
AS varchar(3)) AS [Month],
CAST(AVG(CAST(DATEDIFF(day,DATE1, DATE2) 
AS DECIMAL(10,2))) AS DECIMAL(10,2)) AS tt
FROM tbl3
GROUP BY CAST(DATEPART(yyyy,DATE1) AS 
varchar (5)) + '-' + CAST(DATENAME(m,ec2.DATE2) 
AS varchar(3))
Select * from CTE
ORDER BY 
DATEPART(yyyy, cast([Month] as datetime)),
DATEPART(mm, cast([Month] as datetime));

我同意您可以按照Darius X的建議按年/月訂購。 您還可以使用交叉應用來“包裝”您的計算。 不確定是否可以解決您的特定問題,但需要其他信息。 我在CROSS APPLY中找出MatchStatus,然后在SELECT&GROUP BY子句中使用MatchStatus。

SELECT
    MatchStatus,
    COUNT(*)
FROM MPI.ACTData.Matches
    CROSS APPLY (SELECT CASE WHEN MatchScore >= 69 THEN 'Match' 
                ELSE 'Review' END MatchStatus) ms
GROUP BY MatchStatus

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM