有表 mytable
name
------------------
aaa
bbb
ccc
ddd
eeeselect * from mytable order by name
的返回
是
aaa
bbb
ccc
ddd
eee我现在想在返回的结果里面部分我可以指定排序aaa
bbbddd
ccceee请问有什么办法?
name
------------------
aaa
bbb
ccc
ddd
eeeselect * from mytable order by name
的返回
是
aaa
bbb
ccc
ddd
eee我现在想在返回的结果里面部分我可以指定排序aaa
bbbddd
ccceee请问有什么办法?
select * from mytable order by name
的顺序里面的部分记录我可以指定顺序
case when name='aaa' then 0
when name='bbb' then 1
when name='ddd' then 2
when name='ccc' then 3
when name='eee' then 4 end
select * from mytable order by name
的顺序 里面的部分记录我可以强制指定顺序
为什么ddd要排第三,ccc要排第四?
用户指定,指定ddd就要排在第三吗?不管前面有什么东西,死也要让ddd排第三吗?
还是有什么规律让它排在第三?
要人脑也无法知道,电脑怎么知道。
order by case name when 'ccc' then 'ddd' when 'ddd' then 'ccc' else name end
name
------------------
aaa
bbb
ccc1
ccc2
...
ddd1
ddd2
...
eee
...select * from mytable order by name
的返回
是
aaa
bbb
ccc1
ccc2
...
ddd1
ddd2
...
eee
...我现在想在返回的结果里面部分我可以指定排序 aaa
bbb ddd1
ddd2
...
ccc1
ccc2
... eee 请问有什么办法?
ddd、ccc是已知的
但是ddd、ccc后面的数字不确定我就是想返回的结果按照原本的顺序排序,但是里面的
ddd、ccc我可以去指定顺序不知道说明白了没有
bbb
ccc1
ccc2
... ddd1
ddd2
...
eee
... 现在希望数据顺序ddd1
ddd2
...
可以排在
ccc1
ccc2
...
的前面就是这么一回事
order by case left(name,3)
when 'ccc' then replace(name,'ccc','ddd')
when 'ddd' then replace(name,'ddd','ccc')
else name
end
case when name='aaa' then 0
when name='bbb' then 1
when name='ddd' then 2
when name='ccc' then 3
when name='eee' then 4 end
insert into tb values('aaa')
insert into tb values('bbb')
insert into tb values('ccc')
insert into tb values('ddd')
insert into tb values('eee')
go--1
select * from tb where name = 'aaa'
union all
select * from tb where name = 'bbb'
union all
select * from tb where name = 'ddd'
union all
select * from tb where name = 'ccc'
union all
select * from tb where name = 'eee'--2
select * from tb order by case name when 'aaa' then 1 when 'bbb' then 2 when 'ddd' then 3 when 'ccc' then 4 when 'eee' then 5 enddrop table tb/*
name
----------
aaa
bbb
ddd
ccc
eee(所影响的行数为 5 行)
*/
bbb
eeeddd
ccc 把我要指定顺序的数据放到最后来排序,无法在中间排,因为aaa,bbb,ccc,ddd,eee是未知的,无法写死的,能写死的只有我确定的ccc,ddd最后实现的语句分享一下select * from mytable order by
case when name like '%ddd%' then 0
case when name like '%ccc%' then 1
end ,name