to: marvinhong(边城骆驼) 
我是要求按照a中字符所对应的顺序排列
比如:col_end    col_ch
        1           b
        2           a
        3           c
        4           d
a中字符串值是可变的如果a = 'd','b'那么取出的结果应该是4,1这样的顺序

解决方案 »

  1.   

    select * from test where col_ch='d'
     union all 
      select * from test where col_ch='a';
      

  2.   

    to: GerryYang(轻尘)
    a中的内容是不定的啊,你这样做不是很麻烦?还要动态的出sql 语句?
    还有这样的sql执行效率会不会很低啊?
      

  3.   

    to: GerryYang(轻尘)
    你的办法排序也不对,系统会按照第一个字段排序啊
      

  4.   

    舉例:
    SQL> SELECT * FROM BAO_TEMP
      2  /   COL_END COL_CHR
    ---------- --------------------
             1 B
             2 A
             3 C
             4 D目前歷時: 00:00:00.32
    SQL> DECLARE
      2  STR       VARCHAR2(20);
      3  I         NUMBER(10);
      4  J         NUMBER(10);
      5  STR_V     VARCHAR2(20);
      6  SQL_STR   VARCHAR2(100);
      7  BEGIN
      8  STR:='''A'',''B'',''C'',''D''';
      9  DBMS_OUTPUT.PUT_LINE(STR);
     10  I:=LENGTH(STR)+1;
     11  I:=I/4;
     12  DBMS_OUTPUT.PUT_LINE(TO_CHAR(I));
     13  FOR J IN 1..I LOOP
     14     STR_V := SUBSTR(STR,J*4-2,1)||TO_CHAR(J);
     15     UPDATE BAO_TEMP SET COL_CHR = STR_V
     16     WHERE  COL_CHR = SUBSTR(STR,J*4-2,1);
     17     COMMIT;
     18     SQL_STR:='SELECT COL_END FROM BAO_TEMP ORDER BY SUBSTR(COL_CHR,2,2)';
     19     --上面的SQL語句能得到你的要求
     20     --UPDATE BAO_TEMP SET COL_CHR = SUBSTR(COL_CHR,1,1) --用來恢復表
     21     --WHERE  COL_CHR = SUBSTR(STR,J*4-2,1)||TO_CHAR(J);
     22     --COMMIT;
     23     DBMS_OUTPUT.PUT_LINE(STR_V);
     24  END LOOP;
     25  END;
     26  /
    -------------------------------------
    SQL> SELECT COL_END FROM BAO_TEMP ORDER BY SUBSTR(COL_CHR,2,2)
      2  /   COL_END
    ----------
             2
             1
             3
             4
      

  5.   

    select col_end
    from (select COL_END, COL_CH from SYS_COLS where COL_CH in ( a )) temp_table
    order by col_ch;