oracle - decode函數使用方法
來源:趣味經驗館 1.08W
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值,則返回空值。
實例使用
創建一個學生成績表。欄位有: 學生名, 科目名和分數。
插入測試數據。
測試一及結果:
如果是中文課程的話, 顯示分數, 其他課程分數為零。
這條SQL 看上去使用意義不大。
測試二:統計中文課程的分數。看上去有點意義。
總體看來, decode 的使用看上去和case when 有點類似。如果只是用作以上兩種狀況,看上去意義不大。
使用的兩句使用後的效果一樣,看上去使用decode 多此一舉。
行轉列-有意義的使用
往以上table 再插入一些其他學生的成績:
使用以下SQL:
返回:
由此看來,將行的數據轉化為列, 就很有意義了。
使用case then 也可以達到相同的效果。