2014-01-09 80 views
0

我试图转换此SQL视图按顺序排序月份名称。 任何帮助,将不胜感激:SQL查询月份名称排序

SELECT DATENAME(Month, REQDATE) AS Month, COUNT(WO_NUM) AS Tickets 
FROM  dbo.TASKS 
WHERE  (REQDATE >= '6/1/13') 
GROUP BY DATENAME(Month, REQDATE) 

目前,它显示了几个月失灵..

+0

你想让它们按字母顺序排列还是按日历顺序排序?一月,二月,三月等或四月,八月,十二月......? –

回答

0

试试这个。

SELECT MAX(DATENAME(Month, REQDATE)) AS Month, COUNT(WO_NUM) AS Tickets 
FROM  dbo.TASKS 
WHERE  (REQDATE >= '6/1/13') 
GROUP BY DATEPART(Month, REQDATE) 
ORDER BY DATEPART(Month, REQDATE) ASC 

SQL小提琴:http://sqlfiddle.com/#!3/220be/4

+0

这是排序A-Z,我正在拍摄一月,二月,三月.. – user1854651

+0

@ user1854651好的,回答更新。 –

+0

在SQL Server 2008上运行此错误时出现错误。“列”dbo.TASKS.REQDATE“在ORDER BY子句中无效,因为它不包含在聚合函数或GROUP BY子句中。” –

0

的TSQL功能DATEPART()应该让你每月为整数。试试这个:

SELECT DATENAME(Month, REQDATE) AS Month, COUNT(WO_NUM) AS Tickets 
FROM  dbo.TASKS 
WHERE  (REQDATE >= '6/1/13') 
ORDER BY DatePart(month, REQDATE) 
GROUP BY DatePart(Month, REQDATE), DateName(Month, REQDATE) 
+0

列“dbo.TASKS.REQDATE”在ORDER BY子句中无效,因为它不包含在聚合函数或GROUP BY子句中。 – user1854651

+0

好点。我改变了groupby使用DatePart而不是DateName。嗯。也许它应该有两个。让我再次改变它。 – tgolisch

4

这将显示日历顺序中列出的月份的结果。

SELECT DATENAME(Month, REQDATE) AS Month, COUNT(WO_NUM) AS Tickets 
FROM  dbo.TASKS 
WHERE  (REQDATE >= '6/1/13') 
GROUP BY DATENAME(Month, REQDATE), DATEPART(Month, REQDATE) 
ORDER BY DATEPART(Month, REQDATE) ASC 

我加DATEPART(Month, REQDATE)到GROUP BY子句,这不应该影响分组的结果为DATEPART函数将是每个组中的所有日期相同。

+1

生病了!感谢Adam。 – Kerry7777

0

如果有人仍在寻找答案。诀窍是在日期月份使用AVG。

SELECT DATENAME(Month, REQDATE) AS Month, COUNT(WO_NUM) AS Tickets, AVG(DATEPART(mm, REQDATE)) AS MonthNum 
FROM  dbo.TASKS 
WHERE  (REQDATE >= '6/1/13') 
GROUP BY DATENAME(Month, REQDATE) 
ORDER BY MonthNum ASC