- 34
- 0
- 约6.14千字
- 约 9页
- 2017-05-08 发布于四川
- 举报
ORAcle比较大小和表结构转化(decode,sign)
比较大小与表结构转化(decode,sign)
????
使用方法:
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、表、视图结构转化
现有一个商品销售表sale,表结构为:
month char(6) --月份
sell number(10,2) --月销售金额
现有数据为:
200001 1000
200002 1100
200003 1200
200004 1300
200005 1400
200006 1500
200007 1600
200101 1100
200202 1200
200301 1300
想要转化为以下结构的数据:
year char(4) --年份
month1 number(10,2) --1月销售金额
month2 number(10,2) --2月销售金额
month3 number(10,2) --3月销售金额
month4 number(10,2) --4月销售金额
month5 number(10,2) --5月销售金额
month6 number(10,2) --6月销售金额
month7 number(10,2) --7月销售金额
month8 number(10,2) --8月销售金额
month9 number(10,2) --9月销售金额
month10 number(10,2) --10月销售金额
month11 number(10,2) --11月销售金额
month12 number(10,2) --12月销售金额
结构转化的SQL语句为:
create or replace view
v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)
as
select
substrb(month,1,4),
sum(decode(substrb(month,5,2),01,sell,0)),
sum(decode(substrb(month,5,2),02,sell,0)),
sum(decode(substrb(month,5,2),03,sell,0)),
sum(decode(substrb(month,5,2),04,sell,0)),
?? 在数据库研发的过程当中,有非常多时候需要将行转换成列或将列转换成行来显示数据,而往往我们在建立表结构时不能根据显示的需求来保存数据,于是乎只能在保存数据之后做一些必要的操作(比方说:建立视图等)来达到显示的目的。?????? 下面用一个常见的数据显示来说明decode函数的用法。就是成绩单的显示,这个是教学管理系统中最常见的。我想做研发的人员都遇见过这个,而且在大学期间也是常常接触成绩单,显示的是:姓名、语文、数学等??????? 实现脚本如下(cjd.sql):--建表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
原创力文档

文档评论(0)