对Grouped查询进行排序

时间:2013-01-19 01:03:09

标签: sql-server-2008 tsql

我使用以下查询显示我的数据库有数据的月份列表。

SELECT DATENAME(MONTH, EVENT_DATE) + ' ' + DATENAME(YEAR, EVENT_DATE) AS MonthYear
FROM [ODA].[dbo].[REPORT_CASE_EXT]
GROUP BY DATENAME(MONTH, EVENT_DATE) + ' ' + DATENAME(YEAR, EVENT_DATE)

如果我在查询中添加以下排序,则会收到错误,因为它们不会出现在群组中

SORT BY DATENAME(YEAR, EVENT_DATE), DATENAME(MONTH, EVENT_DATE)

有没有办法实现这种目标?

1 个答案:

答案 0 :(得分:1)

如果您在ORDER BY中使用GROUP BY中的相同内容,那么它将“有效”。

ORDER BY
    DATENAME(MONTH, EVENT_DATE) + ' ' + DATENAME(YEAR, EVENT_DATE)

但是你需要向GROUP BY添加更多信息,以便能够按时间顺序而不是按字母顺序排序(否则2月份是1月之前):

GROUP BY
    datename(YEAR, EVENT_DATE),
    datename(MONTH, EVENT_DATE),
    datepart(YEAR, EVENT_DATE),
    datepart(MONTH, EVENT_DATE)
ORDER BY
    datepart(YEAR, EVENT_DATE),
    datepart(MONTH, EVENT_DATE)