NOMONEYDAY
1231
1432
1-453
2421
2-102
2503
31008
為了符合閱讀習慣,最終報表希望是如下格式:
NOMONTUETHR
12343-45
242-1050
3
------------------------
咱們一步步來實現(xiàn):
1.運用DECODE轉(zhuǎn)換行為列
SQL:
SELECT NO,
DECODE(DAY,1,MONEY,'') DAY1,
DECODE(DAY,2,MONEY,'') DAY2,
DECODE(DAY,3,MONEY,'') DAY3
FROM TEMP
結果:
NODAY1DAY2DAY3
123
143
1-45
242
2-10
250
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;
結果:
NOMONTUETHR
12343-45
242-1050
3
------------------------
重難點歸納:
1.DECODE缺省值設置
DECODE語法如下:decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,缺省值)
如果缺省值由''(兩個單引號)改為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;
結果如下(所有值為負與空值都被賦為0):
NOMONTUETHR
123430
242050
3000
2.列缺省值設置(DAY值為8的顯示為'undefined')
SQL:
SELECT NO,MONEY,
DECODE(DAY,1,'MON',2,'TUE',3,'THR','undefined') DAY
FROM TEMP
結果:
NOMONEYDAY
123MON
143TUE
1-45THR
242MON
2-10TUE
250THR
3100undefined
3.行列轉(zhuǎn)化在表單內(nèi)數(shù)據(jù)量較大的情況下消耗較大
原因:
1.掃描目標數(shù)據(jù)時間開銷大。
2.GROUP BY時,數(shù)據(jù)冗余帶來的多行合并。
優(yōu)點:
表結構穩(wěn)定:DAY增加新值只需增加記錄,無需新增新列!
下一頁 decode()函數(shù)使用技巧
|
新聞熱點
疑難解答
圖片精選