decode(条件,值1,返回值1,值2,返回值2,……,值n,返回值n,缺省值)
含义:
if 条件=值1 then
return (返回值1)
else if 条件=值2
return (返回值2)
……
else if 条件=值n
return (返回值n)
end if
--------------------------------------------------------------------------
比大小
sign()函数根据某个值是0,正数还是负数,分别返回0,1,-1.
select decode(sign(变量1-变量2),-1,变量1,变量2)
--------------------------------------------------------------------------
行列互转
表1:socre
Name Subject Result
1 张三 语文 90
2 张三 数学 98
3 张三 英语 76
4 李四 语文 71
5 李四 语文 72
6 李四 语文 73
-------decoe---
select Name,
sum(decode(Subject,‘语文‘,Result,0)) 语文,
sum(decode(Subject,‘数学‘,Result,0)) 数学,
sum(decode(Subject,‘英语‘,Result,0)) 英语,
from score;
-------case when-then-end---
select Name,
sum(case when Subject=‘语文‘ then Result end) 语文,
sum(case when Subject=‘数学‘ then Result end) 数学,
sum(case when Subject=‘英语‘ then Result end) 英语,
from score;
-----------------结果----------------------------------------------
Name 语文 数学 英语
1 张三 90 98 76
2 李四 71 72 73
-----在order by 中使用decode------------
按语,数,外进行排列 select * from score order by decode(Subject,‘语文‘,1,‘数学‘2,‘英语‘3)
---分别统计男女生数量----
一、
select count(*) from 表 where sex=‘男‘‘;
select count(*) from 表 where sex=‘女‘;
二、
select sum(decode(sex,男,1,0)) 男,sum(decode(sex,女,1,0)) 女 from 表;