我使用强制转换选项将日期转换为月份,并使用Distinct Keyword。现在我想安排从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
答案 0 :(得分:1)
由于您使用的是DISTINCT
关键字,因此必须使用select子句中的列对结果集进行排序。
简单的解决方案是将月份号添加到select子句中,然后在order by子句中使用它:
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
另一个不涉及在选择列表中添加其他列的选项是将DISTINCT
替换为GROUP 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.
限定符,但它确实使查询更具可读性。
答案 1 :(得分:0)
要根据月份进行排序,您可以使用order by Month(date)
答案 2 :(得分:0)
您可以直接在INV_DATE使用order by,因为order by将在select语句后执行...
SELECT DISTINCT CAST(DATENAME(MONTH,INV_DATE) AS VARCHAR(12)) AS INV_DATE
FROM AP_INVOICE_HEAD ORDER BY INV_DATE