在數據庫開發的過程當中,有很多時候需要將行轉換成列或者將列轉換成行來顯示數據,而往往我們在建立表結構時不能根據顯示的要求來保存數據,于是乎只能在保存數據之后做一些必要的操作(比方說:建立視圖等)來達到顯示的目的。
下面用一個常見的數據顯示來說明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