DECODE 函 數 DECODE 函 數 的 功 能 有 點 像 程 式 語 言 的 if-then-else 句 子 , 它 會 能 夠 根 據 資 料 不 同 的 值 , 傳 回 不 同 的 資 料 , 語 法 如 下 :
DECODE(COLUMN_NAME
,VALUE1, SUBSTITUTE1
,VALUE2, SUBSTITUTE2
, ...
,DEFAULT
)如 果 COLUMN_NAME 的 值 是 VALUE1 , 就 傳 回 SUBSTITUTE1 , VALUE2 , 就 傳 回 SUBSTITUTE2 , 如 此 類 推 , 如 果 以 上 的 值 都 不 是 , 就 傳 回 DEFAULT 。 其 實 DECODE 也 可 以 做 到 NVL 的 功 能 , 例 如 NVL(COMM, 0) 可 以 寫 成 :
DECODE(COMM, NULL, 0, COMM)假 設 你 想 列 出 每 個 僱 員 的 部 門 名 稱 , 除 了 可 以 把 EMP 連 接 到 DEPT 外 , 還 可 以 用 DECODE 來 做 。 SQL> SELECT ENAME
2 ,DECODE(DEPTNO
3 ,10 ,'Accounting'
4 ,20 ,'Research'
5 ,30 ,'Sales'
6 ,40 ,'Opeartions'
7 ,'UNKNOWN'
8 ) DEPARTMENT
9 FROM EMP
10 ;ENAME DEPARTMENT
---------- -------------
SMITH Research
ALLEN Sales
WARD Sales
JONES Research
MARTIN Sales
BLAKE Sales
CLARK Accounting
SCOTT Research
KING Accounting
TURNER Sales
ADAMS Research
JAMES Sales
FORD Research
MILLER Accounting14 rows selected.
DECODE(COLUMN_NAME
,VALUE1, SUBSTITUTE1
,VALUE2, SUBSTITUTE2
, ...
,DEFAULT
)如 果 COLUMN_NAME 的 值 是 VALUE1 , 就 傳 回 SUBSTITUTE1 , VALUE2 , 就 傳 回 SUBSTITUTE2 , 如 此 類 推 , 如 果 以 上 的 值 都 不 是 , 就 傳 回 DEFAULT 。 其 實 DECODE 也 可 以 做 到 NVL 的 功 能 , 例 如 NVL(COMM, 0) 可 以 寫 成 :
DECODE(COMM, NULL, 0, COMM)假 設 你 想 列 出 每 個 僱 員 的 部 門 名 稱 , 除 了 可 以 把 EMP 連 接 到 DEPT 外 , 還 可 以 用 DECODE 來 做 。 SQL> SELECT ENAME
2 ,DECODE(DEPTNO
3 ,10 ,'Accounting'
4 ,20 ,'Research'
5 ,30 ,'Sales'
6 ,40 ,'Opeartions'
7 ,'UNKNOWN'
8 ) DEPARTMENT
9 FROM EMP
10 ;ENAME DEPARTMENT
---------- -------------
SMITH Research
ALLEN Sales
WARD Sales
JONES Research
MARTIN Sales
BLAKE Sales
CLARK Accounting
SCOTT Research
KING Accounting
TURNER Sales
ADAMS Research
JAMES Sales
FORD Research
MILLER Accounting14 rows selected.
如:
table1:
colone char(1);
coltwo number;
则:
select decode(colone,'1','选择',coltwo,'没选择'),count(*)
from table1
group by decode(colone,'1','选择',coltwo,'没选择')
from aa
group by decode(sex,'m','id,name','w','name,id')
不对呀高手指点!!!
我想通过一个字段值,控制分组顺序。
from aa
group by id,name,decode(sex,'m','id,name','w','name,id')
比如我对name字段进行限制,a的情况下,加入这个条件,b的情况下不考虑nameselect id
from test
where
id='1'
and
decode(sex,'a','name=''2''','b',true);
这样写,又错误,,高手指点!!!
from test
where id='1'
and decode(sex,'a','2','b',name)=name
create table stud
(
sid varchar2(10),
kcbm varchar2(10),
cj int
);
--插入测试数据
insert into stud values('1','语文',80);
insert into stud values('2','数学',90);
insert into stud values('3','英语',100);
commit;
--创建视图,decode用法
create or replace view cjd as
select sid,
decode(kcbm,'语文',cj,0) 语文,
decode(kcbm,'数学',cj,0) 数学,
decode(kcbm,'英语',cj,0) 英语
from stud
order by sid;
--显示数据
select * from cjd;执行过程如下:SQL> create table stud(sid varchar2(10),
2 kcbm varchar2(10),
3 cj int);表已创建。SQL> insert into stud values('1','语文',80);已创建 1 行。SQL> insert into stud values('2','数学',90);已创建 1 行。SQL> insert into stud values('3','英语',100);已创建 1 行。SQL> commit;提交完成。SQL> create or replace view cjd as
2 select sid,
3 decode(kcbm,'语文',cj,0) 语文,
4 decode(kcbm,'数学',cj,0) 数学,
5 decode(kcbm,'英语',cj,0) 英语
6 from stud
7 order by sid;视图已建立。SQL> select * from cjd;SID 语文 数学 英语
---------- ---------- ---------- ----------
1 80 0 0
2 0 90 0
3 0 0 100
对column1列执行DECODE函数,如果column1有一个值为value1,那么将会用output1来代替当前值,如果column1有一个值为value2,那么将会用output2来代替当前值,如果column1中哪两个值都不是,那么就会用OUTPUT3来代替当前值。