【開發篇sql】 條件和表示式(七) decode,case when,connect by 語句

yellowlee發表於2010-05-15

7decode,case when,connect by 語句

decode(條件,1,翻譯值1,2,翻譯值2,...n,翻譯值n,預設值)

case when 條件1 then 1

        when 條件n then n

        else n+1

        end

很多時候這兩個語句是類似的,比如:

SQL> select decode(dummy, 'X', 'xx', 'Y') decode_col,

  2         case

  3           when dummy = 'X' then

  4            'xxxx'

  5           else

  6            'Z'

  7         end case_col

  8    from dual;

 

DECODE_COL CASE_COL

---------- --------

xx         xxxx

 

不過一般來說decode用來處理匹配少量數值,且匹配條件比較簡單,如果過於複雜的條件則應該使用case語句。

Connect by ..start with通常用來做樹形查詢。舉個簡單的樹形結構例子,比如全國的機構組織架構,總部設為A,一級分部AXXAAAAAB),二級分部AXXXXAAAAAAAAAABAABAAAABAB),建立資料如下:

SQL> create table t_test_organ (

  2  id   char(5),

  3  p_id char(5),

  4  name varchar2(40)

  5  );

 

Table created

SQL> insert into t_test_organ values ('A','','總公司');

 

1 row inserted

SQL> insert into t_test_organ values ('AAA','A','分公司1');

 

1 row inserted

SQL> insert into t_test_organ values ('AAB','A','分公司2');

 

1 row inserted

SQL> insert into t_test_organ values ('AAAAA','AAA','支公司1');

 

1 row inserted

SQL> insert into t_test_organ values ('AAAAB','AAA','支公司2');

 

1 row inserted

SQL> insert into t_test_organ values ('AABAA','AAB','支公司3');

 

1 row inserted

SQL> insert into t_test_organ values ('AABAB','AAB','支公司4');

 

1 row inserted

SQL> select level, id, name

  2    from t_test_organ

  3  connect by prior id = p_id

  4   start with id = 'A';

 

     LEVEL ID    NAME

---------- ----- ----------------------------------------

         1 A     總公司

         2 AAA   分公司1

         3 AAAAA 支公司1

         3 AAAAB 支公司2

         2 AAB   分公司2

         3 AABAA 支公司3

         3 AABAB 支公司4

 

7 rows selected

(待續)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16179598/viewspace-662802/,如需轉載,請註明出處,否則將追究法律責任。

相關文章