i have query each row consists of 3 columns:
- name
- distance
- proximity
i want sort rows based on number of not null
(i.e. present) values follows:
- all values present
- two values present in order
- name , distance
- name , proximity
- distance , proximity
- one value present
- name
- distance
- proximity
here sample data (insert statements sorted in order expect):
/* create table #temp ( type varchar(100), name varchar(100), distance varchar(100), proximity varchar(100) ); */ insert #temp values ('airport', 'kbli', '21mi', 'city') insert #temp values ('airport', 'kbli', '21mi', null ) insert #temp values ('airport', 'kbli', null , 'city') insert #temp values ('airport', null , '21mi', 'city') insert #temp values ('airport', 'kbli', null , null ) insert #temp values ('airport', null , '21mi', null ) insert #temp values ('airport', null , null , 'city')
i have had success coalesce
statement looking efficient , readable. later change 4 columns.
assign present value if number (a name=4, distance=3, proximity=2), sum them , sort that:
select ... ... order case when name null 0 else 4 end + case when distance null 0 else 3 end + case when proximity null 0 else 2 end desc
the trick here 3+2 > 4, distance , proximity beats name.
Comments
Post a Comment