Go Premium for a chance to win a PS4. Enter to Win

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 352
  • Last Modified:

Grouping SQL Results Based on certain ranges in an int field.MS SQL 2008

I have a query which returns the results i need, will be putting this into a view as i'll need this for a few different things, one of the things i need it for is to group based on a particular field.

the field is called length, it is in kilometres, i want to group records based on the length as follows:

0-5 = group1
5-10 = group 2
10-20 = group 3
20-40 = group 4
>40 = group 5

could i use a case statement within the view to generate a column with the group name based on the ranges above, and then do a query on this view. grouping by that group column to collate the results?

to keep it simple please assume the following table:
id, roadname, city, state, roadlength

where roadlength is the column i want to group on.

2 Solutions
Yes, you can use a case statement.

  when length between 0 and 5 then 'group1'
  when length between 6 and 10 then 'group2'
end case

select roadname, city, state,
  when length between 0 and 5 then 'group1'
  when length between 6 and 10 then 'group2'
  when length between 11 and 20 then 'group3'
  when length between 21 and 40 then 'group4'
  when length>41 then 'group5' end
end as mygroup
from yourtable
QlemoC++ DeveloperCommented:
Yes, both are right. If you want the view only for grouping purposes, and nothing else, you won't need that; you can use ad-hoc views (aka derived tables)
select kmgroup, min(roadlength), max(roadlength), avg(roadlength)
 (select *, 
    case when roadlength <=  5 then 'group1'
         when roadlength <= 10 then 'group2'
         when roadlength <= 20 then 'group3'
         when roadlength <= 40 then 'group4'
         else 'group5'
    end kmgroup
  from kmtable
 ) grptbl
group by kmgroup

Open in new window

In addition this example shows that you won't need to use the between in case.
yes you can use a case statement to do this but you would be much better off if you actually set up
a table and used that in your view to give the grouping/range name
HRT_HSVAuthor Commented:
split points as first 2 comments provided the complete solution.  1st comment confirmed logic but 2nd comment had complete code.

Much appreciated everyone who provided solution thank you

Featured Post

Microsoft Certification Exam 74-409

VeeamĀ® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now