從Oracle 表格行列轉(zhuǎn)置說(shuō)起第1/2頁(yè)
| NO | MONEY | DAY |
| 1 | 23 | 1 |
| 1 | 43 | 2 |
| 1 | -45 | 3 |
| 2 | 42 | 1 |
| 2 | -10 | 2 |
| 2 | 50 | 3 |
| 3 | 100 | 8 |
為了符合閱讀習(xí)慣,最終報(bào)表希望是如下格式:
| NO | MON | TUE | THR |
| 1 | 23 | 43 | -45 |
| 2 | 42 | -10 | 50 |
| 3 |
------------------------
咱們一步步來(lái)實(shí)現(xiàn):
1.運(yùn)用DECODE轉(zhuǎn)換行為列
SQL:
SELECT NO,
DECODE(DAY,1,MONEY,'') DAY1,
DECODE(DAY,2,MONEY,'') DAY2,
DECODE(DAY,3,MONEY,'') DAY3
FROM TEMP
結(jié)果:
| NO | DAY1 | DAY2 | DAY3 |
| 1 | 23 | ||
| 1 | 43 | ||
| 1 | -45 | ||
| 2 | 42 | ||
| 2 | -10 | ||
| 2 | 50 | ||
| 3 |
2.按NO字段分組,并更改列名
SQL:
SELECT NO, MAX(DAY1) MON, MAX(DAY2) TUE, MAX(DAY3) THR
FROM (SELECT NO,
DECODE(DAY, 1, MONEY,'') DAY1,
DECODE(DAY, 2, MONEY,'') DAY2,
DECODE(DAY, 3, MONEY,'') DAY3
FROM TEMP)
GROUP BY NO;
結(jié)果:
| NO | MON | TUE | THR |
| 1 | 23 | 43 | -45 |
| 2 | 42 | -10 | 50 |
| 3 |
------------------------
重難點(diǎn)歸納:
1.DECODE缺省值設(shè)置
DECODE語(yǔ)法如下:decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,缺省值)
如果缺省值由''(兩個(gè)單引號(hào))改為0,即SQL:
SELECT NO, MAX(DAY1) MON, MAX(DAY2) TUE, MAX(DAY3) THR
FROM (SELECT NO,
DECODE(DAY, 1, MONEY,0) DAY1,
DECODE(DAY, 2, MONEY,0) DAY2,
DECODE(DAY, 3, MONEY,0) DAY3
FROM TEMP)
GROUP BY NO;
結(jié)果如下(所有值為負(fù)與空值都被賦為0):
| NO | MON | TUE | THR |
| 1 | 23 | 43 | 0 |
| 2 | 42 | 0 | 50 |
| 3 | 0 | 0 | 0 |
2.列缺省值設(shè)置(DAY值為8的顯示為'undefined')
SQL:
SELECT NO,MONEY,
DECODE(DAY,1,'MON',2,'TUE',3,'THR','undefined') DAY
FROM TEMP
結(jié)果:
| NO | MONEY | DAY |
| 1 | 23 | MON |
| 1 | 43 | TUE |
| 1 | -45 | THR |
| 2 | 42 | MON |
| 2 | -10 | TUE |
| 2 | 50 | THR |
| 3 | 100 | undefined |
3.行列轉(zhuǎn)化在表單內(nèi)數(shù)據(jù)量較大的情況下消耗較大
原因:
1.掃描目標(biāo)數(shù)據(jù)時(shí)間開銷大。
2.GROUP BY時(shí),數(shù)據(jù)冗余帶來(lái)的多行合并。
優(yōu)點(diǎn):
表結(jié)構(gòu)穩(wěn)定:DAY增加新值只需增加記錄,無(wú)需新增新列!
下一頁(yè) decode()函數(shù)使用技巧相關(guān)文章
Oracle7.X 回滾表空間數(shù)據(jù)文件誤刪除處理方法
Oracle7.X 回滾表空間數(shù)據(jù)文件誤刪除處理方法...2007-03-03
PL/SQL登錄Oracle數(shù)據(jù)庫(kù)報(bào)錯(cuò)ORA-12154:TNS:無(wú)法解析指定的連接標(biāo)識(shí)符已解決(本地未安裝Oracle
這篇文章主要介紹了PL/SQL登錄Oracle數(shù)據(jù)庫(kù)報(bào)錯(cuò)ORA-12154:TNS:無(wú)法解析指定的連接標(biāo)識(shí)符已解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
ORACLE查看當(dāng)前賬號(hào)的相關(guān)信息
ORACLE 12C 后新增了一個(gè)功能,它會(huì)記錄用戶的最后一次登錄時(shí)間:SPARE6字段記錄用戶的最后一次登錄時(shí)間,本文給大家ORACLE如何查看當(dāng)前賬號(hào)的相關(guān)信息,感興趣的朋友一起看看吧2021-06-06
Oracle數(shù)據(jù)庫(kù)并行查詢出錯(cuò)的解決方法
這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)并行查詢出錯(cuò)的解決方法,需要的朋友可以參考下2014-07-07
oracle常用分析函數(shù)與聚合函數(shù)的用法
今天小編就為大家分享一篇關(guān)于oracle常用分析函數(shù)與聚合函數(shù)的用法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
Oracle如何通過執(zhí)行計(jì)劃查看查詢語(yǔ)句是否使用索引
這篇文章主要介紹了Oracle如何通過執(zhí)行計(jì)劃查看查詢語(yǔ)句是否使用索引問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Oracle數(shù)據(jù)庫(kù)ORA 54013錯(cuò)誤的解決辦法
ORA 54013 不允許對(duì)虛擬列執(zhí)行INSERT 操作,這是Oracle 11 的新特性。接下來(lái)通過本文給大家介紹oracle數(shù)據(jù)庫(kù)ORA 54013錯(cuò)誤的解決辦法,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-10-10
Oracle實(shí)現(xiàn)動(dòng)態(tài)SQL的拼裝要領(lǐng)
這篇文章主要介紹了Oracle實(shí)現(xiàn)動(dòng)態(tài)SQL的拼裝要領(lǐng),對(duì)于Oracle的進(jìn)一步學(xué)習(xí)來(lái)說(shuō)非常重要,需要的朋友可以參考下2014-07-07

