ORACLE 中 DECODE函数的用法
2013-12-14 12:20
441 查看
1、语法格式
decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
2、函数解释:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF
3、使用方法:
1)比较大小
select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
例如:
变量1=10,变量2=20
则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。
2)表、视图结构转化
举例1:现有一个商品销售表sale,表结构为:
现有数据为:
想要转化为以下结构的数据:
结构转化的SQL语句为:
举例2:从我自己做过的项目中摘取的一个实例,目的是对表记录进行分析打印
表结构:
SQL语句:
decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
2、函数解释:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF
3、使用方法:
1)比较大小
select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
例如:
变量1=10,变量2=20
则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。
2)表、视图结构转化
举例1:现有一个商品销售表sale,表结构为:
现有数据为:
想要转化为以下结构的数据:
结构转化的SQL语句为:
create or replace view v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12) as select substr(month,1,4) as 年份, sum(decode(substr(month,5,2),'01',sell,0)) AS 一月, sum(decode(substr(month,5,2),'02',sell,0)) AS 二月, sum(decode(substr(month,5,2),'03',sell,0)) AS 三月, sum(decode(substr(month,5,2),'04',sell,0)) AS 四月, sum(decode(substr(month,5,2),'05',sell,0)) AS 五月, sum(decode(substr(month,5,2),'06',sell,0)) AS 六月, sum(decode(substr(month,5,2),'07',sell,0)) AS 七月, sum(decode(substr(month,5,2),'08',sell,0)) AS 八月, sum(decode(substr(month,5,2),'09',sell,0)) AS 九月, sum(decode(substr(month,5,2),'10',sell,0)) AS 十月, sum(decode(substr(month,5,2),'11',sell,0)) AS 十一月, sum(decode(substr(month,5,2),'12',sell,0)) AS 十二月 from aa_cs group by substr(month,1,4);
举例2:从我自己做过的项目中摘取的一个实例,目的是对表记录进行分析打印
表结构:
SQL语句:
select e.equi_type, ty1.type_name, e.equi_cd, e.equi_name, count(m.equi_cd) as m_count, (sum(decode(m.maintain_type, '0001', m.total_cost, 0))) AS type1, (sum(decode(m.maintain_type, '0002', m.total_cost, 0))) AS type2, (sum(decode(m.maintain_type, '0003', m.total_cost, 0))) AS type3, (sum(decode(m.maintain_type, '0004', m.total_cost, 0))) AS type4, (sum(decode(m.maintain_type, '',0,m.total_cost))) AS TOTAL_COST from equi_maintain m left join equi_equipment e on m.equi_cd=e.id left join equi_type ty1 on e.equi_type=ty1.id group by e.EQUI_CD,e.equi_name,e.equi_type,ty1.type_name order by e.EQUI_CD asc显示效果为:
相关文章推荐
- Oracle中NVL、NVL2、DECODE函数的用法
- oracle decode函数用法
- 关于Oracle中decode函数的用法
- Oracle DECODE函数的用法详解
- Oracle中的decode函数、nvl函数、coalesce函数的用法 ccx原创
- oracle decode函数用法
- Oracle DECODE函数的用法详解
- Oracle中DECODE函数的用法
- Oracle中decode函数用法含义
- oracle decode函数的用法
- Oracle中decode函数用法
- oracle decode函数用法
- ORACLE中decode函数的用法
- Oracle中decode函数用法
- oracle decode函数的用法
- Oracle中NVL、NVL2、DECODE函数的用法
- ORACLE中decode函数的用法?
- oracle decode函数的用法
- Oracle中decode函数用法
- Oracle中DECODE函数的用法