2017-03-03 82 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) –