Question: I have a stored procedure and the select statement is:

```
SELECT     { fn MONTHNAME(OrderDate) } AS MonthName, YEAR(OrderDate) AS Year, SUM(TotalValue) AS Profits
FROM         [Order]
WHERE     (YEAR(OrderDate) = @year)
GROUP BY { fn MONTHNAME(OrderDate) }, YEAR(OrderDate)

```

this shows the sum total for every month 
But I need to order the result by month and year coz my result shown like:

```
April 2013 
February 2013 
January 2013 
June 2013 
March 2013 
May 2013 

```

What is the solution in such a case?

Answer: 
Try this. It works perfectly. Note that you already entering a year value. So you don't need to order or group Year since you can only choose one Year at a time. So the extra code is not needed.

```
SELECT { fn MONTHNAME(OrderDate) } AS MonthName, SUM(TotalValue) AS Profits
FROM [Order]
WHERE (YEAR(OrderDate) = @year)
GROUP BY { fn MONTHNAME(OrderDate) }, DATEPART(M, OrderDate)
ORDER BY DATEPART(M, OrderDate)

```
```
select 
cast(year(appointmentdate) as char(4))+''+ 
case when len(cast(month(appointmentdate)as char(2)))=1 
then '0'+cast(  month(appointmentdate) as char(2) ) else cast(month(appointmentdate) as char(2))end  as apporder
from timeslots  
group by appointmentdate
order by appOrder

```