泉源:网海拾贝
在数据库开辟的进程傍边,有很多时分需求将行转换成列或许将列转换成行来施展阐发数据,而往往我们在确立表布局时不克不及按照施展阐发的要求来保留数据,于是乎只能在保留数据之后做一些必要的操纵(比方说:确立视图等)来抵达施展阐发的目标。
下面用一个罕见的数据施展阐发来阐明');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 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
版权声明: 原创作品,准许转载,转载时请务必以超链接体式款式标明文章 原始因由 、作者信息和本声明。不然将追查法律责任。