现在我想让查询出来的数据按照我的想法排序.但是我排序的是个varchar
比如说我要按照学历排序,学历应该按照高中<大专<本科<研究生排序
但是现在数据库不知道我这个学历哪个大哪个小!怎么办啊?

解决方案 »

  1.   

     select 学历( case  高中 then 1
     case 大学  then 2
     case 研究生 then 3
    ) xx order by xx.asc 
     这个思路
      

  2.   

    from xx表   忘记写了哈
      

  3.   

    2楼答案很正确,如果case用的不熟,可以单独添加一个学历表,用外键引入,不过性能肯定不如2楼
      

  4.   

    这个学历是不是应该做个master表啊,然后做个order字段就行了。
    我觉得应该这样。
      

  5.   

    两种方式:
    1。学历不应该写死成汉字,应该用一个参照表,比如1代表小学,2代表初中,等等,你的表里面只需要存1,2,3,4之类的,这样就好order by了。
    2。如果已经写死了不想改表结构,那么可以采用case when then的方式,该语法是标准sql。
    比如:select case 学历 when '小学' then 1 WHEN '初中' THEN 2 WHEN '高中' THEN 3 END as 学历 from tbl order by 学历 desc/asc。。
    或者特定的函数,例如oracle的decode来做处理。推荐第一种。比如某时候,你想把初中改成初级中学,就不用改数据表,只要改参照表即可。
      

  6.   

    select t.userid,t.login_id,
           case DUTY_LEVEL_CODE 
                when 1382 then 100
                when 1383 then 200
                when 1380 then 300
                when 1422 then 400
                when 1423 then 500
                when 1420 then 600
                when 1421 then 700
                when 1381 then 800
                else 900 
           end
    from uum_user t我执行这段查询语句后出来三列
    t.userid   t.login_id  DUTY_LEVEL_CODEwhen1382.
    我现在想给DUTY_LEVEL_CODEwhen1382.这个列起个别名怎么起啊?
      

  7.   

    end 后面加别名即可。
    你把整个这一段看成一个字段,对字段加别名会吧?
      

  8.   


    mysql> select * from tablea;
    +------+------+
    | id   | name |
    +------+------+
    |    1 | a    |
    +------+------+
    1 row in set (0.02 sec)mysql> select case name when 'a' then 'A' end as haha from tablea;
    +------+
    | haha |
    +------+
    | A    |
    +------+
    1 row in set (0.00 sec)
      

  9.   

    Hibernate深入研究之Criteria