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