2017-03-03 17 views
0

我使用強制選項將日期轉換爲月份,並使用Distinct關鍵字。現在我想安排從1月到12月的月份訂單。我怎樣才能做到這一點?從1月至12月安排月份訂單。我怎樣才能做到這一點?

QUERY:

SELECT DISTINCT CAST(DATENAME(MONTH,INV_DATE) AS VARCHAR(12)) AS INV_DATE 
FROM AP_INVOICE_HEAD 
ORDER BY INV_DATE ASC 
+2

很難回答一個這樣的信息很少的問題。你能分享一些更多的上下文,比如你正在運行的查詢嗎? – Mureinik

+0

SELECT DISTINCT CAST(DATENAME(MONTH,INV_DATE)AS VARCHAR(12))AS INV_DATE FROM AP_INVOICE_HEAD – user7653509

+0

上面沒有您的查詢很難提供幫助。我建議尋找到ORDER BY雖然 – Phil3992

回答

0

爲了進行排序基礎上一個月,你可以使用order by Month(date)

+0

它的工作正常,沒有明確的關鍵字。 – user7653509

+0

但我想明確的價值 – user7653509

0

您可以通過INV_DATE SELECT語句後,將執行使用直接訂購,因爲爲了...

SELECT DISTINCT CAST(DATENAME(MONTH,INV_DATE) AS VARCHAR(12)) AS INV_DATE 
FROM AP_INVOICE_HEAD ORDER BY INV_DATE 
1

由於您使用的是DISTINCT關鍵字,您必須使用一列從SELECT子句中的結果通過集進行排序。

簡單的解決辦法是在一個月號碼添加到SELECT子句,然後通過子句中使用它的順序:

SELECT DISTINCT CAST(DATENAME(MONTH,t.INV_DATE) AS VARCHAR(12)) AS INV_DATE, 
     DATEPART(MONTH, INV_DATE) As INT_Month 
FROM AP_INVOICE_HEAD 
ORDER BY INT_Month 

不涉及添加另一列選擇列表中的另一個選項是更換DISTINCTGROUP BY

SELECT CAST(DATENAME(MONTH, INV_DATE) AS VARCHAR(12)) As INV_DATE 
FROM AP_INVOICE_HEAD t 
GROUP BY CAST(DATENAME(MONTH, INV_DATE) AS VARCHAR(12)) 
ORDER BY MAX(MONTH(t.INV_DATE)) 

注:在order by子句,INV_DATE指的是列從表中,而不是從別名select子句。
即使t.限定符在這裏不需要,它確實使查詢更具可讀性。

+0

謝謝,它的工作@Zohar – user7653509

+0

[很高興幫助: - )](http://meta.stackoverflow.com/questions/291325/how-to-show-appreciation-to-a-user -on-計算器/ 291327#291327) –

相關問題