2014-01-09 3 views
0

Я пытаюсь преобразовать этот SQL View, чтобы отсортировать имена месяцев в порядке. Любая помощь будет оценена:SQL Query Month Name Сортировка

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

Больной! Спасибо Адаму. – Kerry7777

0

В случае, если кто-либо все еще ищет ответ. Trick - использовать 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 
Смежные вопросы