從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í)間開(kāi)銷(xiāo)大。
2.GROUP BY時(shí),數(shù)據(jù)冗余帶來(lái)的多行合并。
優(yōu)點(diǎn):
表結(jié)構(gòu)穩(wěn)定:DAY增加新值只需增加記錄,無(wú)需新增新列!
下一頁(yè) decode()函數(shù)使用技巧相關(guān)文章
oracle數(shù)據(jù)庫(kù)ORA-01196錯(cuò)誤解決辦法分享
這篇文章主要介紹了oracle數(shù)據(jù)庫(kù)ORA-01196錯(cuò)誤解決辦法分享,小編覺(jué)得還是挺不錯(cuò)的,這里分享給大家,供需要的朋友參考。2017-10-10
ORACLE 如何查詢(xún)被鎖定表及如何解鎖釋放session
后臺(tái)數(shù)據(jù)庫(kù)操作某一個(gè)表時(shí)發(fā)現(xiàn)一直出于假死狀態(tài),可能是該表被某一用戶(hù)鎖定,接下來(lái)為你詳細(xì)介紹下查詢(xún)被鎖定表及如何解鎖,感興趣的你可以參考下,希望可以幫助到你2013-03-03
在客戶(hù)端配置TNS測(cè)試報(bào)錯(cuò)ORA-12170:TNS:連接超時(shí)
在Red Hat Enterprise Linux Server Releae 5.5 成功安裝ORACLE 10g 后,在客戶(hù)端配置TNS后,測(cè)試是否可以連接到數(shù)據(jù)塊服務(wù)器,結(jié)果報(bào)錯(cuò):ORA-12170:TNS:連接超時(shí)2012-12-12
Oracle數(shù)據(jù)庫(kù)連接并訪問(wèn)Microsoft?SQL?Server數(shù)據(jù)庫(kù)操作步驟
近期在項(xiàng)目中客戶(hù)軟件升級(jí),舊版本的數(shù)據(jù)庫(kù)用的SQL Server而新版本換為了Oracle,這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)連接并訪問(wèn)Microsoft?SQL?Server數(shù)據(jù)庫(kù)的操作步驟,需要的朋友可以參考下2024-08-08
WMware redhat 5 oracle 11g 安裝方法
本文將詳細(xì)介紹WMware中redhat 5 安裝oracle 11g方法,需要的朋友可以參考下2012-12-12
oracle下一條SQL語(yǔ)句的優(yōu)化過(guò)程(比較詳細(xì))
很簡(jiǎn)單的一次調(diào)整,語(yǔ)句加了適當(dāng)?shù)乃饕笮阅芫陀写蠓奶嵘?。?dāng)時(shí)看到這條語(yǔ)句的時(shí)候,第一感覺(jué)就是執(zhí)行效率肯定低下。語(yǔ)句的功能是求某一客戶(hù)當(dāng)天產(chǎn)品的總銷(xiāo)量。2010-04-04
PL/SQL?Developer15和Oracle?Instant?Client安裝配置詳細(xì)圖文教程
PL/SQL Developer是一種集成的開(kāi)發(fā)環(huán)境,專(zhuān)門(mén)用于開(kāi)發(fā)、測(cè)試、調(diào)試和優(yōu)化Oracle PL/SQL存儲(chǔ)程序單元,比如觸發(fā)器等,這篇文章主要給大家介紹了關(guān)于PL/SQL?Developer15和Oracle?Instant?Client安裝配置的詳細(xì)圖文教程,需要的朋友可以參考下2024-04-04
CentOS8下安裝oracle客戶(hù)端完整(填坑)過(guò)程分享(推薦)
這篇文章主要介紹了CentOS8下安裝oracle客戶(hù)端完整(填坑)過(guò)程分享,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12

