Reputation: 20051
I need to show count of job application for last 12 months based on & need to group them also based on Job Application dates
I tried following it generates error as shown below.
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
But that resulted in an error:
Msg 195, Level 15, State 10, Line 9
'COUNT' is not a recognized built-in function name.
I need it for SQL Server 2008
Final Working solution
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)
Upvotes: 0
Views: 2304
Reputation: 755421
You need to try something like this to get one row for each month/year that contains the count of applications for that month/year:
SELECT
MONTH(ApplicationDate),
YEAR(ApplicationDate),
COUNT(*)
FROM
dbo.[Jobs]
GROUP BY
YEAR(ApplicationDate),
MONTH(ApplicationDate)
ORDER BY
YEAR(ApplicationDate),
MONTH(ApplicationDate)
This counts the applications per month / year and groups by it, too. You should get an output something like this:
(this is taken from the AdventureWorks
sample database)
If you do a GROUP BY ApplicationDate
, then you're basically grouping / counting by the actual date itself (not it's month/year parts)
Update: if you must have SQL Server provide the formatting in the MM-YYYY
format (really should be done in your web app and not by SQL Server), then try this:
;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
Upvotes: 1
Reputation: 650
Try This...
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))
Upvotes: 0
Reputation: 457
How about this one?
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
the cast function was missing for month. Output will be as follows.
Total ApplicationDate
22217 7-2012
17979 8-2012
30341 9-2012
Edited for sorting...
If you are not particular about the 'MM-YYYY' format. Convert the month/year combination to number and order by that. Try this.
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
Upvotes: 0