Decode函式的用法,CASE語句的用法?

2022-08-31 15:33:23 字數 3103 閱讀 3267

case語句的用法?

oracle用法很簡單:

select last_name, job_id, salary

case job_id

when 'it_prog' then 1.10*salary

when 'st_clerk' then 1.15*salary

when 'sa_rep' then 1.20*salary

else salary end "revised_salary"

from employees

decode的語法:decode(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value等於if1時,decode函式的結果返回then1,...,如果不等於任何乙個if值,則返回else。初看一下,decode 只能做等於測試,但剛才也看到了,我們通過一些函式或計算替代value,是可以使decode函式具備大於、小於或等於功能。 

如何用decode進行大於小於的比較?

利用sign()函式和decode和在一起用

selectdecode(sign(變數1-變數2),-1,變數1,變數2) from dual;

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

該函式的含義如下:

if 條件=值1 then

return(翻譯值1)

elsif 條件=值2 then

return(翻譯值2)

......

elsif 條件=值n then

return(翻譯值n)

else

return(預設值)

end if

·        使用方法:

1、比較大小

selectdecode(sign(變數1-變數2),-1,變數1,變數2) from dual; --取較小值

sign()函式根據某個值是0、正數還是負數,分別返回0、1、-1

例如:變數1=10,變數2=20

則sign(變數1-變數2)返回-1,decode解碼結果為「變數1」,達到了取較小值的目的。

2、表、檢視結構轉化

現有乙個商品銷售表sale,表結構為:

month    char(6)      --月份

sell    number(10,2)   --月銷售金額

現有資料為:

200001  1000

200002  1100

200003  1200

200004  1300

200005  1400

200006  1500

200007  1600

200101  1100

200202  1200

200301  1300

想要轉化為以下結構的資料:

year   char(4)      --年份

month1  number(10,2)   --1月銷售金額

month2  number(10,2)   --2月銷售金額

month3  number(10,2)   --3月銷售金額

month4  number(10,2)   --4月銷售金額

month5  number(10,2)   --5月銷售金額

month6  number(10,2)   --6月銷售金額

month7  number(10,2)   --7月銷售金額

month8  number(10,2)   --8月銷售金額

month9  number(10,2)   --9月銷售金額

month10  number(10,2)   --10月銷售金額

month11  number(10,2)   --11月銷售金額

month12  number(10,2)   --12月銷售金額

結構轉化的sql語句為:

create or replace view

v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)

asselect

substrb(month,1,4),

sum(decode(substrb(month,5,2),'01',sell,0)),

sum(decode(substrb(month,5,2),'02',sell,0)),

sum(decode(substrb(month,5,2),'03',sell,0)),

sum(decode(substrb(month,5,2),'04',sell,0)),

sum(decode(substrb(month,5,2),'05',sell,0)),

sum(decode(substrb(month,5,2),'06',sell,0)),

sum(decode(substrb(month,5,2),'07',sell,0)),

sum(decode(substrb(month,5,2),'08',sell,0)),

sum(decode(substrb(month,5,2),'09',sell,0)),

sum(decode(substrb(month,5,2),'10',sell,0)),

sum(decode(substrb(month,5,2),'11',sell,0)),

sum(decode(substrb(month,5,2),'12',sell,0))

from sale

group by substrb(month,1,4);

decode函式用法

decode 函式將該數值與一系列的序偶相比較,以決定最後的返回結果 序偶序偶,就是成對出現 我們將這個函式與 switch 比較,我們發現他們基本相似,唯一不同的是 switch 將要比較的值放在 case 後面都加上了 break中。select id,decode flag,y yes n n...

Decode函式用法

decode 條件,值1,返回值1,值2,返回值2,值n,返回值n,預設值 該函式的含義如下 if 條件 值1 then return 翻譯值1 elsif 條件 值2 then return 翻譯值2 elsif 條件 值n then return 翻譯值n else return 預設值 end...

decode函式的用法

含 釋 decode 條件,值1,翻譯值1,值2,翻譯值2,值n,翻譯值n,預設值 該函式的含義如下 if 條件 值1 then return 翻譯值1 elsif 條件 值2 then return 翻譯值2 elsif 條件 值n then return 翻譯值n else return 預設值...