五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > Oracle中SQL之case when then用法

Oracle中SQL之case when then用法

文章來源:365jz.com     點(diǎn)擊數(shù):731    更新時(shí)間:2018-10-19 09:18   參與評論

case具有兩種格式。簡單case函數(shù)和case搜索函數(shù)。


--簡單case函數(shù)
case sex
  when '1' then '男'
  when '2' then '女’
  else '其他' end
--case搜索函數(shù)
case when sex = '1' then '男'
     when sex = '2' then '女'
     else '其他' end


這兩種方式,可以實(shí)現(xiàn)相同的功能。簡單case函數(shù)的寫法相對比較簡潔,但是和case搜索函數(shù)相比,功能方面會(huì)有些限制,比如寫判定式。

還有一個(gè)需要注重的問題,case函數(shù)只返回第一個(gè)符合條件的值,剩下的case部分將會(huì)被自動(dòng)忽略。

--比如說,下面這段sql,你永遠(yuǎn)無法得到“第二類”這個(gè)結(jié)果
case when col_1 in ('a','b') then '第一類'
     when col_1 in ('a') then '第二類'
     else '其他' end

下面實(shí)例演示:
首先創(chuàng)建一張users表,其中包含id,name,sex三個(gè)字段,表內(nèi)容如下:


SQL> drop table users purge;

drop table users purge

ORA-00942: 表或視圖不存在
SQL> create table users(id int,name varchar2(20),sex number);

Table created
SQL> insert into users(id,name) values(1,'張一');
row inserted
SQL> insert into users(id,name,sex) values(2,'張二',1);
row inserted
SQL> insert into users(id,name) values(3,'張三');
row inserted
SQL> insert into users(id,name) values(4,'張四');
row inserted
SQL> insert into users(id,name,sex) values(5,'張五',2);
row inserted
SQL> insert into users(id,name,sex) values(6,'張六',1);
row inserted
SQL> insert into users(id,name,sex) values(7,'張七',2);
row inserted
SQL> insert into users(id,name,sex) values(8,'張八',1);
row inserted
SQL> commit;

Commit complete
SQL> select * from users;

                                    ID NAME                        SEX
--------------------------------------- -------------------- ----------
張一                
張二                          1
張三                
張四                
張五                          2
張六                          1
張七                          2
張八                          1
rows selected


1、上表結(jié)果中的"sex"是用代碼表示的,希望將代碼用中文表示。可在語句中使用case語句:


SQL> select u.id,u.name,u.sex,
   (case u.sex
     when 1 then '男'
     when 2 then '女'
     else '空的'
     end
    )性別
 from users u;
 
                                     ID NAME                        SEX 性別
--------------------------------------- -------------------- ---------- ------
張一                            空的
張二                          1 男
張三                            空的
張四                            空的
張五                          2 女
張六                          1 男
張七                          2 女
張八                          1 男
rows selected


2、如果不希望列表中出現(xiàn)"sex"列,語句如下:


SQL> select u.id,u.name,
   (case u.sex
     when 1 then '男'
     when 2 then '女'
     else '空的'
     end
    )性別
 from users u;
 
                                     ID NAME                 性別
--------------------------------------- -------------------- ------
張一                 空的
張二                 男
張三                 空的
張四                 空的
張五                 女
張六                 男
張七                 女
張八                 男
rows selected


3、將sum與case結(jié)合使用,可以實(shí)現(xiàn)分段統(tǒng)計(jì)。
     如果現(xiàn)在希望將上表中各種性別的人數(shù)進(jìn)行統(tǒng)計(jì),sql語句如下:


SQL> select
  sum(case u.sex when 1 then 1 else 0 end)男性,
  sum(case u.sex when 2 then 1 else 0 end)女性,
  sum(case when u.sex <>1 and u.sex<>2 then 1 else 0 end)性別為空
from users u;

       男性         女性       性別為空
---------- ---------- ----------
        2          0

--------------------------------------------------------------------------------
SQL> select
  count(case when u.sex=1 then 1 end)男性,
  count(case when u.sex=2 then 1 end)女,
  count(case when u.sex <>1 and u.sex<>2 then 1 end)性別為空
from users u;

       男性          女       性別為空
---------- ---------- ----------
        2          0


 總結(jié):

 第一種 格式 : 簡單Case函數(shù) :

格式說明    

    case 列名

    when   條件值1   then  選擇項(xiàng)1

    when   條件值2    then  選項(xiàng)2.......

    else     默認(rèn)值      end

eg:

    select 
    case   job_level
    when     '1'     then    '1111'
    when   '2'     then    '1111'
    when   '3'     then    '1111'
    else       'eee' end
    from     dbo.employee


 第二種  格式 :Case搜索函數(shù)

格式說明    

    case  

    when  列名= 條件值1   then  選擇項(xiàng)1

    when  列名=條件值2    then  選項(xiàng)2.......

    else    默認(rèn)值 end

eg:

    update  employee
    set         e_wage =
    case
    when   job_level = '1'    then e_wage*1.97
    when   job_level = '2'   then e_wage*1.07
    when   job_level = '3'   then e_wage*1.06
    else     e_wage*1.05
    end


提示:通常我們在寫Case When的語句的時(shí)候,會(huì)容易忘記 end 這個(gè)結(jié)束,一定要記得喲!

比較: 兩種格式,可以實(shí)現(xiàn)相同的功能。

    簡單Case函數(shù)的寫法相對比較簡潔,但是和Case搜索函數(shù)相比,功能方面會(huì)有些限制,比如寫判斷式。還有一個(gè)需要注意的問題,Case函數(shù)只返回第一個(gè)符合條件的     值,剩下的Case部分將會(huì)被自動(dòng)忽略。


如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會(huì)為你解答?。?點(diǎn)擊進(jìn)入論壇

發(fā)表評論 (731人查看,0條評論)
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱:
最新評論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)