比如我有一个表
tab
col1    col2    col3
35      fds     q
54      jhg     3
76      llfd    s
77      vc      9现在我希望能够实现以col3列来排序
并且顺序是(q,9,3,s)
不知道能不能实现?

解决方案 »

  1.   

    你的(q,9,3,s)有规律吗?帮你顶下吧。恐怕要你一个一个查出来然后union,得到的结果应该是你想要的结果
      

  2.   

    应该不好直接排序吧
    直接用union还是可以的
      

  3.   

    union的办法我也知道
    总觉得太苯
    难道真没有其它办法了
      

  4.   

    这一列的数据现在是说是没有规律的
    我现在是确认ORACLE有没有这样的功能
    比如:
    select * from tab order by col3 ref ('q','9','3','s')根据col3这一列,按照('q','9','3','s')这样一个顺序排序tab表的数据当然了,这只是我杜撰的.不过根据上面的思路我有想到另外一个办法:
    select col1,col2,case when col3='q' then 1 when col3='9' then 2 when col3='3' then 3 when col3='s' then 4 end rank from tab order by rank
      

  5.   

    嘿嘿,楼主的上面这种方法不错,但是如果像(q,9,3,s)的值有很多个那怎么办呢?那可能就要写很多case when .. then .. 了。最好是找到某种排序的规律,才能动态地排序。
      

  6.   

    现在的order by
    排序的规律是什么
    有根据ascii码来比较
    如果是汉字,可能还可以根据拼音,部首,笔画来比较
    但有时我们的排序可能需要一些特殊的要求
    其实我来问这个问题
    就是想知道ORACLE能不能自定义这种规律
      

  7.   

    你直接在table里面加上一列好了作为排序列 你要改变排序就改变里面的值。你看行吗
      

  8.   

    吃饱了撑着呢。
    少就导出数据重新按照col3顺序录入,然后直接查询。
    多le,这样没有屁规律,至少lz没有提供的,就只能按照11楼说的那样来处理。
      

  9.   

    1. create a funtion2. order by function