日期:2014-05-17  浏览次数:20433 次

一个关于数据表查询排序的问题,搞不定了,请教高手!
本帖最后由 u010472902 于 2013-05-03 20:53:31 编辑
有这个一张表,数据如下:
id,name1,name2,displayorder
------------------------------
1,aaaaaa,______,3
2,bbbbbb,______,1
3,aaaaaa,222222,5
4,bbbbbb,222222,2
5,cccccc,222222,4
6,bbbbbb,333333,0
7,cccccc,______,6

我想要的查询是总体按照displayorder排序,但是要按照name1分组,即name1相同的排在一起,在name1相同的情况下再根据displayorder拍name2(其中name2为“______”始终排在该组的第一个)。上面数据的查询结果要为:
id,name1,name2,displayorder
------------------------------
2,bbbbbb,______,1
6,bbbbbb,333333,0
4,bbbbbb,222222,2
1,aaaaaa,______,3
3,aaaaaa,222222,5
7,cccccc,______,6
5,cccccc,222222,4


 请问如何写这个查询SQL,谢谢!!!
SQL

------解决方案--------------------
SELECT * FROM TB ORDER BY NAME,CASE WHEN NAME2='_' THEN 0 ELSE 1 END,NAME2
------解决方案--------------------
没办法,做了一点改进
再用排名函数
create table t_order
(
id varchar(10),
name1 varchar(20),
name2 varchar(20),
displayorder varchar(10)
)


1,aaaaaa,______,3
2,bbbbbb,______,1
3,aaaaaa,222222,5
4,bbbbbb,222222,2
5,cccccc,222222,4
6,bbbbbb,333333,0
7,cccccc,______,6

insert into t_order values ('1','aaaaaa','______',3)
insert into t_order values ('2','bbbbbb','______',1)
insert into t_order values ('3','aaaaaa','222222',5)
insert into t_order values ('4','bbbbbb','222222',2)
insert into t_order values ('5','cccccc','222222',4)
insert into t_order values ('6','bbbbbb','333333',0)
insert into t_order values ('7','cccccc','______',6)


update t_order set name2 = '-1' where name2='______'
select RANK() over (partition by name1 order by displayorder,name1,cast(name2 as int)) as order2, * from t_order order by displayorder