Oracle decode 函式及其用法

2021-08-26 12:15:56 字數 2937 閱讀 5362

decode()函式,它將輸入數值與函式中的引數列表相比較,根據輸入值返回乙個對應值。函式的引數列表是由若干數值及其對應結果值組成的若干序偶形式。當然,如果未能與任何乙個實參序偶匹配成功,則函式也有預設的返回值。

語法結構如下:

decode (expression, search_1, result_1)

decode (expression, search_1, result_1, search_2, result_2)

decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n)

decode (expression, search_1, result_1, default)

decode (expression, search_1, result_1, search_2, result_2, default)

decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)

比較表示式和搜尋字,如果匹配,返回結果;如果不匹配,返回default值;如果未定義default值,則返回空值。

1. 建立乙個學生成績表。欄位有: 學生名, 科目名和分數

create table student_score(

name varchar2(30),

subject varchar2(20),

score number(4,1)

);2. 插入測試資料

insert into student_score (name,subject,score)values('zhang san','chinese',90);

insert into student_score (name,subject,score)values('zhang san','mathematics',80);

insert into student_score (name,subject,score)values('zhang san','english',79);

3.測試一:

select name,subject,decode(subject, 'chinese',score,0) from student_score;

結果如下:

如果是中文課程的話, 顯示分數, 其他課程分數為零。

這條sql 看上去使用意義不大。

測試二: 

select name,sum(decode(subject, 'chinese',score,0)) as chinese from student_score group by name;

統計中文課程的分數。看上去有點意義。

總體看來, decode 的使用看上去和case when 有點類似。如果只是用作以上兩種狀況,看上去意義不大。

select name,sum(decode(subject, 'chinese',score,0)) as chinese from student_score group by name;

select name,score as chinese from student_score;

使用的兩句使用後的效果一樣,看上去使用decode 多此一舉。

往以上table 再插入一些其他學生的成績:

insert into student_score (name,subject,score)values('li shi','chinese',96);

insert into student_score (name,subject,score)values('li shi','mathematics',86);

insert into student_score (name,subject,score)values('li shi','english',76);

insert into student_score (name,subject,score)values('wang wu','chinese',92);

insert into student_score (name,subject,score)values('wang wu','mathematics',82);

insert into student_score (name,subject,score)values('wang wu','english',72);

使用以下sql:

select name,

sum(decode(subject, 'chinese', nvl(score, 0), 0)) "chinese",

sum(decode(subject, 'mathematics', nvl(score, 0), 0)) "mathematics",

sum(decode(subject, 'english', nvl(score, 0), 0)) "english"

from student_score

group by name;

返回:將行的資料轉化為列, 是不是很有意義了。

使用case then 也可以達到相同的效果。

select name,

sum(case when subject='chinese'

then nvl(score,0)

else 0

end) "chinese",

sum(case when subject='mathematics'

then nvl(score,0)

else 0

end) "mathematics",

sum(case when subject='english'

then nvl(score,0)

else 0

end) "english"

from student_score

group by name;

Oracle Decode函式詳解

函式介紹 decode函式是oracle pl sql的功能強大的函式之一,目前還只有oracle公司的sql提供了此函式,其它資料庫廠商的sql實現還沒有此功能。decode有什麼用途呢?先構造乙個例子,假設我們想給智星職員加工資,其標準是 工資在8000元以下的加20 工資在8000元或以上的加...

oracle decode函式的用法

該函式可以接受可變的引數,具體引數情況如下 decode 條件,值1,翻譯值1,值2,翻譯值2,值n,翻譯值n,預設值 該函式的含義如下 if 條件 值1 return 翻譯值1 else if 條件 值2 return 翻譯值2 else if 條件 值n return 翻譯值n else ret...

oracle decode函式的使用

由於近期的一點點工作,學習了一點點oracle的東西,僅記錄一點 decode函式和sign函式配合在sql語句中做判斷。decode 語法 decode expression,compare1,value1,compare2,value2,defaultvalue 意思很簡單,如果expressi...