語法
用途
DECODE將expr與每個(gè)搜索值逐一進(jìn)行比較。如果expr等于搜索值驻右,則Oracle數(shù)據(jù)庫返回相應(yīng)的結(jié)果拣凹。如果找不到匹配付呕,則Oracle返回默認(rèn)值活箕。如果省略默認(rèn)值筋讨,那么Oracle返回null壁袄。
按照自己的理解DECODE函數(shù)就是把某列按照一定的條件轉(zhuǎn)換成另外一個(gè)值
- 假如有一下表格(Scores):
ID | Age | Sex | Score | City |
---|---|---|---|---|
1 | 18 | 1 | 90 | 028 |
2 | 30 | 0 | 60 | 010 |
3 | 40 | 1 | 55 | 020 |
4 | 60 | 0 | 70 | 021 |
其中Age=1是男行嗤,Age=0是女。如果我們想讓表格的數(shù)據(jù)更加直觀可以這樣寫:
select ID,
Age,
DECODE(Sex,
1,'男',
0,'女',
'未知性別') Sex,
Score,
DECODE(City,
'028','成都',
'010','北京',
'020','廣東',
'021','上海',
'未知') City
from Scores;
轉(zhuǎn)換后的表格:
ID | Age | Sex | Score | City |
---|---|---|---|---|
1 | 18 | 男 | 90 | 成都 |
2 | 30 | 女 | 60 | 北京 |
3 | 40 | 男 | 55 | 廣東 |
4 | 60 | 女 | 70 | 上海 |
- DECODE行轉(zhuǎn)列操作
本文章使用Oracle Live Sql堂鲜,具體可以登錄此網(wǎng)站查看使用詳情栈雳。本文章使用EMP表做演示。
- 如何統(tǒng)計(jì)出每個(gè)部門的人數(shù)
10號(hào)部門人數(shù) | 20號(hào)部門人數(shù) | 30號(hào)部門人數(shù) |
---|---|---|
3 | 5 | 6 |
select SUM(DECODE(DEPTNO,10,1,0)) "10號(hào)部門人數(shù)",
SUM(DECODE(DEPTNO,20,1,0)) "20號(hào)部門人數(shù)",
SUM(DECODE(DEPTNO,30,1,0)) "30號(hào)部門人數(shù)"
from EMP;
DECODE(DEPTNO,10,1,0) 將DEPTNO==10的這列的值轉(zhuǎn)換成1缔莲,如果DEPTNO!=10哥纫,那么這列的值轉(zhuǎn)換為0. 然后用求和函數(shù)SUM求出10號(hào)部門人數(shù)。如果將SQL語句改成痴奏,會(huì)發(fā)生什么:
select SUM(DECODE(DEPTNO,10,2,0)) "10號(hào)部門人數(shù)",
SUM(DECODE(DEPTNO,20,0,1)) "20號(hào)部門人數(shù)",
SUM(DECODE(DEPTNO,30,1,0)) "30號(hào)部門人數(shù)"
from EMP;
10號(hào)部門人數(shù) | 20號(hào)部門人數(shù) | 30號(hào)部門人數(shù) |
---|---|---|
6 | 9 | 6 |
解析
select SUM(DECODE(DEPTNO,10,2,0)) "10號(hào)部門人數(shù)", --將這列的值轉(zhuǎn)換為2
SUM(DECODE(DEPTNO,20,0,1)) "20號(hào)部門人數(shù)", --不等于20號(hào)部門的人數(shù)蛀骇,實(shí)際上就是10號(hào)和30號(hào)部門的人數(shù)
SUM(DECODE(DEPTNO,30,1,0)) "30號(hào)部門人數(shù)"
from EMP;