How to sort MonthName (varchar) in SQL Server? -


i got stuck while sorting month name in order in below query. here period alias user can choose if wants see result in daily, weekly, monthly or yearly. sorting working rest of cases except month. taking month string , if try convert month giving exception.

please have , guide me.

it begin return like:

april august december 

desired output:

january february march april december 

code:

declare @period char = 'm' declare @finaldateid int = 20170101;  select     period, sum(cast(totalamount bigint)) value                 (select                  case              when @period = 'd'                 cast(d.datename varchar(50))              when @period = 'w'                 cast(d.weekofyear varchar(50))             when @period = 'm'                 cast(d.monthname varchar(50))              when @period = 'y'                 cast(d.calendaryear varchar(50))           end period,           tr.totalamount                revenue tr       inner join            dates d on tr.dateid = d.id                       (tr.dateid between                      case                          when @period = 'd'                             convert(varchar, convert(datetime, convert(char(8), @finaldateid)) - 30, 112)                          when @period = 'w'                             convert(varchar, convert(datetime, convert(char(8), @finaldateid)) - 364, 112)                          when @period = 'm'                             convert(varchar, convert(datetime, convert(char(8), @finaldateid)) - 365, 112)                          when @period = 'y'                             convert(varchar, convert(datetime, convert(char(8), @finaldateid)) - 3652, 112) end , @finaldateid)           ) totalrevenue group      period order     case         when @period = 'm'            convert(month, period)      end 

output returning without sort:

period     value -------------------- april         4750 august        4750 december    187250 february      4000 january      12500 

desired output after sorting month:

period      value  ----------------------- january     12500 february     4000 april        4750 august       4750 december   187250 

shared sample data/table @ https://1drv.ms/u/s!ak02jpvbvozehy0hs2r8rxh6mhsr

don't mess around names of date's part!

any approach build full date using month's name , date fragment in order month's number fail, if executing system has got different language. if application might ever run in international environment, must find way deal without hacks.

if period real date somewhere, might extract year , month using year() , month() , order both of them. both come numeric index.

but solution seems simpler:

obviously using dates table (which thing!)

from posted example take, column [monthofyear] has got numeric month index. , you've got fiscalyear too. include these columns query , use order fiscalyear,monthofyear.


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -