2013-12-12 2 views
0

мне нужно показать кол приема на работе в течение последних 12 месяцев на основе & необходимости группировать их также на основе применения Работы датыSQL-запрос для подсчета на основе ММ-ГГГГ части даты

Я попытался после него генерирует ошибку как показано ниже.

SELECT 
    COUNT(MONTH(ApplicationDate) AS VARCHAR(2)) + '-' + CAST(YEAR(ApplicationDate) AS VARCHAR(4)) AS Total, 
    ApplicationDate 
FROM 
    [Jobs] 
GROUP BY 
    ApplicationDate, ApplicationDate 
ORDER BY 
    ApplicationDate 

Но это привело к ошибке:

Msg 195, Level 15, State 10, Line 9
'COUNT' is not a recognized built-in function name.

мне нужно это для SQL Server 2008

Окончательный рабочий раствор

SELECT 
MONTH(ApplicationDate), YEAR(ApplicationDate), COUNT(*) AS Total, 
    (CAST(MONTH(ApplicationDate) AS VARCHAR(2)) + '-' + CAST(YEAR(ApplicationDate) AS VARCHAR(4))) as ApplicationDate 
    FROM [Jobs] 
GROUP BY YEAR(ApplicationDate), MONTH(ApplicationDate) 

ORDER BY 
     YEAR(ApplicationDate), MONTH(ApplicationDate) 

ответ

0

Как насчет этого?

SELECT 
     COUNT(*) AS Total, 
     (CAST(MONTH(ApplicationDate) AS VARCHAR(2)) + '-' + CAST(YEAR(ApplicationDate) AS VARCHAR(4))) as ApplicationDate 
    FROM 
     [Jobs] 
    GROUP BY 
     (CAST(MONTH(ApplicationDate) AS VARCHAR(2)) + '-' + CAST(YEAR(ApplicationDate) AS VARCHAR(4))) 
    ORDER BY 
     ApplicationDate 

Функция литья отсутствовала в течение месяца. Результат будет следующим.

Total ApplicationDate 
22217 7-2012 
17979 8-2012 
30341 9-2012 

отредактирована для сортировки ...

Если вы не особенно о формате 'MM-YYYY'. Преобразуйте комбинацию месяц/год в число и порядок. Попробуй это.

SELECT 
    COUNT(*) AS Total, 
    RIGHT(CONVERT(VARCHAR(10), ApplicationDate, 103), 7) as ApplicationDate, 
    CAST(REPLACE(RIGHT(CONVERT(VARCHAR(10), ApplicationDate, 103), 7), '/', '') as int) as numdate 
FROM 
    [Jobs] 
GROUP BY 
    RIGHT(CONVERT(VARCHAR(10), ApplicationDate, 103), 7) 
ORDER BY 
    numdate,ApplicationDate 
+0

Это не получает желаемого результата несколько для MM-YYYY, это показать 1 \t 2012-09-21 '1 \t 2013-09-01 2013-09- 06 2013-09-08 2013-09-09 2013-09-11 2013-09-19 2013-09-21 2013-09-22 2013-09-24 2013-09-26 2013-10-06 2013-12-11 2013-12-12' – Learning

+0

@KnowledgeSeeker ЧК отредактированный запрос – ray

+0

Он работает сейчас .. Спасибо .. – Learning

1

Вы должны попробовать что-то вроде этого, чтобы получить одну строку за каждый месяц/год, который содержит количество заявок за этот месяц/год:

SELECT 
    MONTH(ApplicationDate), 
    YEAR(ApplicationDate), 
    COUNT(*) 
FROM 
    dbo.[Jobs] 
GROUP BY 
    YEAR(ApplicationDate), 
    MONTH(ApplicationDate) 
ORDER BY 
    YEAR(ApplicationDate), 
    MONTH(ApplicationDate) 

В этом случае учитываются приложения в месяц/год и группы. Вы должны получить на выходе что-то вроде этого:

enter image description here

(это берется из базы данных AdventureWorks образца)

Если вы делаете GROUP BY ApplicationDate, то вы в основном группировка/подсчета по фактическая дата сама (не это месяц/год) части

Update: если вы должен быть SQL Server обеспечивают форматирование в формате MM-YYYY (на самом деле должно быть сделано в вашем веб-приложения, а не SQL Server), то попробуйте следующее:

;WITH GroupedData AS 
(
    SELECT 
     DateMonth = MONTH(ApplicationDate), 
     DateYear = YEAR(ApplicationDate), 
     JobsCount = COUNT(*) 
    FROM 
     dbo.[Jobs] 
    GROUP BY 
     YEAR(ApplicationDate), 
     MONTH(ApplicationDate) 
) 
SELECT 
    RIGHT('00' + CAST(DateMonth AS VARCHAR(2)), 2) + '-' + 
    CAST(DateYear AS VARCHAR(4)), 
    JobsCount 
FROM 
    GroupedData 
ORDER BY 
    DateMonth, DateYear 
+0

до сих пор ваш запрос получает правильный результат, но я не могу использовать его как я нужен еще один столбец, которые показывают MM-YYYY, я пытался, но это дает мне ошибки или получает неправильный результат. Как я могу изменить его с нашим результатом эффекта. – Learning

+0

@KnowledgeSeeker: обновил свой ответ, чтобы включить ваше форматирование необходимо –

0

Попробуйте это ...

SELECT DATENAME(month,ApplicationDate) + ' ' + CAST(DATEPART(year,ApplicationDate) AS VARCHAR(4)), 
     COUNT(1) TotalCnt 
FROM dbo.[Jobs] 
GROUP BY DATENAME(month,ApplicationDate) + ' ' + CAST(DATEPART(year,ApplicationDate) AS VARCHAR(4)) 
Смежные вопросы