有表 mytable
name
------------------
aaa
bbb
ccc
ddd
eeeselect * from mytable order by name
的返回

aaa
bbb
ccc
ddd
eee我现在想在返回的结果里面部分我可以指定排序aaa
bbbddd
ccceee请问有什么办法?

解决方案 »

  1.   

    就是说大顺序还是按照
    select * from mytable order by name 
    的顺序里面的部分记录我可以指定顺序
      

  2.   

    select * from mytable order by 
    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 
      

  3.   

    就是说大顺序还是按照 
    select * from mytable order by name 
    的顺序 里面的部分记录我可以强制指定顺序
      

  4.   


    为什么ddd要排第三,ccc要排第四?
    用户指定,指定ddd就要排在第三吗?不管前面有什么东西,死也要让ddd排第三吗?
    还是有什么规律让它排在第三?
    要人脑也无法知道,电脑怎么知道。
      

  5.   

    select * from mytable 
    order by case name when 'ccc' then 'ddd' when 'ddd' then 'ccc' else name end
      

  6.   

    有表 mytable 
    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我可以去指定顺序不知道说明白了没有
      

  7.   

    原本返回的结果就是按照字母排序aaa 
    bbb 
    ccc1 
    ccc2 
    ... ddd1 
    ddd2 
    ... 
    eee 
    ... 现在希望数据顺序ddd1 
    ddd2 
    ...
    可以排在
    ccc1 
    ccc2 
    ... 
    的前面就是这么一回事
      

  8.   

    select * from mytable 
    order by case left(name,3) 
    when 'ccc' then replace(name,'ccc','ddd') 
    when 'ddd' then replace(name,'ddd','ccc')
    else name 
     end
      

  9.   

    select * from mytable order by 
    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 
      

  10.   

    create table tb(name varchar(10)) 
    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 行)
    */
      

  11.   

    谢谢各位,利用这个办法解决了最后效果是aaa 
    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