有一组数据如下:id name taxis createtime
1 a 0 2009-01-01 01:32:57
2 b 2 2009-01-02 02:32:57
3 c 5 2009-01-03 03:32:57
4 d 0 2009-01-04 04:32:57
5 e 0 2009-01-05 05:32:57
6 f 1 2009-01-06 09:32:57
7 g 0 2009-01-07 08:32:57
8 h 4 2009-01-08 07:32:57
9 i 3 2009-01-09 06:32:57想要这样排序id name taxis createtime6 f 1 2009-01-06 09:32:57
2 b 2 2009-01-02 02:32:57
9 i 3 2009-01-09 06:32:57
8 h 4 2009-01-08 07:32:57
3 c 5 2009-01-03 03:32:57
1 a 0 2009-01-01 01:32:57
4 d 0 2009-01-04 04:32:57
5 e 0 2009-01-05 05:32:57
7 g 0 2009-01-07 08:32:57先taxis 排序,然后再createtime排序,老郁闷了,写这sql半天调不好。请指点一下,谢谢!
1 a 0 2009-01-01 01:32:57
2 b 2 2009-01-02 02:32:57
3 c 5 2009-01-03 03:32:57
4 d 0 2009-01-04 04:32:57
5 e 0 2009-01-05 05:32:57
6 f 1 2009-01-06 09:32:57
7 g 0 2009-01-07 08:32:57
8 h 4 2009-01-08 07:32:57
9 i 3 2009-01-09 06:32:57想要这样排序id name taxis createtime6 f 1 2009-01-06 09:32:57
2 b 2 2009-01-02 02:32:57
9 i 3 2009-01-09 06:32:57
8 h 4 2009-01-08 07:32:57
3 c 5 2009-01-03 03:32:57
1 a 0 2009-01-01 01:32:57
4 d 0 2009-01-04 04:32:57
5 e 0 2009-01-05 05:32:57
7 g 0 2009-01-07 08:32:57先taxis 排序,然后再createtime排序,老郁闷了,写这sql半天调不好。请指点一下,谢谢!
SELECT
id,
name,
taxis,
createtime
FROM
TB
ORDER BY
taxis,createtime
???
怎么会调不好呢?
因为他的taxis字段,不是正常的升序和降序,1 2 3 4 5 0,这个怎么排?
楼主知道这个排序是升序,还是降序不????
升序降序都达不到效果,我用Union all 也没调好。
哥们能给段完整的sql语句吗,我测试还是达不到我想要的结果,数据库中假设有100条数据,我只想调出来8条数据,先按taxis排序,然后再看createtime排序。按taxis排序 不要 等于0 的 升序排序。然后再按createtime排序
哥们能给段完整的sql语句吗,我测试还是达不到我想要的结果,数据库中假设有100条数据,我只想调出来8条数据,先按taxis排序,然后再看createtime排序。按taxis排序 不要 等于0 的 升序排序。然后再按createtime排序
你自己建一个零时表,里面在你的表的基础上再加一个自增长的ID
然后,你先把taxis>0的记录按你的排序查出来,然后插入到零时表里面
再把taxis=0的记录按你的排序查出来,再插入到零时表里面再从零时表里,根据自增长的ID的排序,来获取你要的结果你看怎么样?这是一个土办法,应该能解决问题。但是,不怎么地道看哪个高手出来看看,或者你到MSSQL的专栏里面,发表一下,看那里有没有高手能解决,我看那个里面很多大鸟都在的
go
insert test select 1, 'a', 0 , '2009-01-01 01:32:57'
insert test select 2, 'b' , 2 , '2009-01-02 02:32:57'
insert test select 3, 'c' , 5 , '2009-01-03 03:32:57'
insert test select 4, 'd' , 0 , '2009-01-04 04:32:57'
insert test select 5, 'e' , 0 , '2009-01-05 05:32:57'
insert test select 6, 'f' , 1 , '2009-01-06 09:32:57'
insert test select 7, 'g', 0 , '2009-01-07 08:32:57'
insert test select 8, 'h' , 4 , '2009-01-08 07:32:57'
insert test select 9, 'i' , 3 , '2009-01-09 06:32:57'
go
select * from test
go
select top 8 * from test order by case when taxis>0 then taxis else 100 end asc,createtime asc
go
drop table test
/*
id name taxis createtime
----------- ---------- ----------- ------------------------------------------------------
6 f 1 2009-01-06 09:32:57.000
2 b 2 2009-01-02 02:32:57.000
9 i 3 2009-01-09 06:32:57.000
8 h 4 2009-01-08 07:32:57.000
3 c 5 2009-01-03 03:32:57.000
1 a 0 2009-01-01 01:32:57.000
4 d 0 2009-01-04 04:32:57.000
5 e 0 2009-01-05 05:32:57.000(所影响的行数为 8 行)*/
top 后面的值取足够大保证所有行被选中