我有一张表如下字段及数据:
state  level
1        A     
1        B
2        A
3        B
4        A
4        B
我想得到的查询结果如下:
state  level
1        B    
1        A3        B
4        B
2        A
4        A即首先按条件state=1对level倒序,再state!=1对level倒序。如何用一条sql实现?

解决方案 »

  1.   

    没搞懂, order by level desc,state asc 不就可以了么?
      

  2.   

    select * from table order by (case state  when 1 then 1 else level)
    我也不太清楚这样可以不可以, 但是你可以参照着个思想.
      

  3.   

    同意一楼的
    order by level desc,state asc 
      

  4.   

    order by desc/asc following?
      

  5.   

    我试过联合查询,如下:
    select * from (select state,level from res_table r where r.state=1 order by level desc)
    union 
    select * from (select state,level from res_table r where r.state!=1 order by level desc)
    结果联合查询有自己的一套排序方法,并不像想象中的那样。
      

  6.   

    order by level desc,state asc --
    就是按level倒序排,并按state顺序排。。你试一下不就可以了么?
      

  7.   

    我试过的,
    按一楼的结果:
    1 B
    3 B
    4 B
    1 A
    2 A
    4 A
    我要的结果是:
    1       B   
    1       A
    3       B
    4       B
    2       A
    4       A
      

  8.   

    联合查询:
    select state, level from (select state,level from t_table r where r.state=1 order by level desc)
    union  
    select state, level from (select state,level from t_table r where r.state!=1 order by level desc)
      

  9.   

    to:preferme
    我试过联合查询,结果是按表的主键排序
      

  10.   

    用联合查询的结果:
    1 A
    1 B
    2 A
    3 B
    4 A
    4 B
    我要的结果是:
    1 B   
    1 A
    3 B
    4 B
    2 A
    4 A
    联合查询的结果按state重新做了排序
      

  11.   

    楼主你做两个视图,分别对应state=1和state<>1的记录,分别在两个视图里排好序,再union就可以了。
    是麻烦一点。
      

  12.   

    我的要求就是state=1的在查询结果的最上面,按level倒序。其它的state,就按level倒序,排在后面就可以了。
    如果sql不行的话,只能用java的集合分两次来取了
      

  13.   

    SELECT * FROM TABLE1 ORDER BY (CASE state WHEN '1' THEN '1' ELSE '2' end), LEVEL DESC,state
    用case语句把不是1的变成比1大的相同的值,做为第一个 排序条件就成了
      

  14.   

    SELECT * FROM TABLE1 ORDER BY (CASE state WHEN '1' THEN '1' ELSE '2' end), LEVEL DESC  
    18楼,最后的state不需要了吧
      

  15.   

    楼主的意思我懂了,但是我用sql实现不了
    不好意思,帮不了
      

  16.   

    需要啊,要不然排出来的时候 state就不是从小到大了,会可能排出1         b
    1         a
    3         b
    4         b 
    4         a
    2         a         
      

  17.   

    werosh给的是正确的。
    很抱歉jiangnan641020,没有好好看你的回复。。谢谢,结贴