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)銷大。
2.GROUP BY時(shí),數(shù)據(jù)冗余帶來(lái)的多行合并。
優(yōu)點(diǎn):
表結(jié)構(gòu)穩(wěn)定:DAY增加新值只需增加記錄,無(wú)需新增新列!
下一頁(yè) decode()函數(shù)使用技巧標(biāo)簽:包頭 衢州 衡水 淮北 潮州 定西 通遼 溫州
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《從Oracle 表格行列轉(zhuǎn)置說(shuō)起第1/2頁(yè)》,本文關(guān)鍵詞 從,Oracle,表格,行列,轉(zhuǎn)置,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。