假设表A有以下字段: 
id, key1 ,key2, key3, key4, key5, type 
id和type不能为空,其他均可为空!! 
查询条件是: 
当type="B"时: 
1.若key1和key有值时,按key1 升序,  key2 升序排序 
2.若key5有值时,按key5升序排序 
说明:key为key2+key3+key4 
请问这个SQL该如何写 

----------------------------------------------------
应该是这种情况,条件1和2同时满足时两个条件都执行,要按3个排
若是都没有值则都不行即不排,若只满足其中一个则按其中一个执行
其实key就是key2,key3,key4的值得组合,我要查出id,key1,key,key5,type请问这该怎么写!!!

解决方案 »

  1.   

    试一下:
    select * from tableA where 1=1 order by decode(type,'B',decode(key1*key*key5,0,decode(key1*key,0,decode(key5,0,null,key5),key1||','||key2),key1||','||key2||','||key5);
      

  2.   

    -- TRY IT ..
    SELECT *
      FROM A
     ORDER BY KEY1, DECODE(KEY2+KEY3+KEY4,NULL,NULL,KEY2), KEY5;
      

  3.   

    我的实现是这样的:  SELECT id, decode(key2,null,'',key2)||decode(key3,null,'','/'||key3)||decode(key4,null,'','/'||key4) AS key ,key1,key5,type FROM A
    WHERE type = 'B' 
    ORDER BY
    decode(key1||key,null,decode(key5,null,null,key5),decode(key5,null,key1||','||key2,key1||','||key2||','||key5));这样可否!!!