從Oracle 表格行列轉(zhuǎn)置說起第1/2頁

當(dāng)你面對如下格式的一個表格:NO為人員的ID,MONEY是收入,DAY是星期(1代表星期一,7代表周日)。

為了符合閱讀習(xí)慣,最終報表希望是如下格式:

————————

咱們一步步來實現(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

結(jié)果:

2.按NO字段分組,并更改列名

SQL:

SELECT NO, MAX(DAY1) , MAX(DAY2) , MAX(DAY3)
FROM (SELECT NO,
DECODE(DAY, 1, MONEY,”) DAY1,
DECODE(DAY, 2, MONEY,”) DAY2,
DECODE(DAY, 3, MONEY,”) DAY3
FROM TEMP)
GROUP BY NO;

結(jié)果:

————————

重難點歸納:

1.DECODE缺省值設(shè)置

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;

結(jié)果如下():

2.列缺省值設(shè)置(DAY值為8的顯示為’undefined’)

SQL:

SELECT NO,MONEY,
DECODE(DAY,1,’MON’,2,’TUE’,3,’THR’,’undefined’) DAY
FROM TEMP

結(jié)果:

3.行列轉(zhuǎn)化在表單內(nèi)數(shù)據(jù)量較大的情況下消耗較大

原因:

1.掃描目標(biāo)數(shù)據(jù)時間開銷大。

2.GROUP BY時,數(shù)據(jù)冗余帶來的多行合并。

優(yōu)點:

下一頁 decode()函數(shù)使用技巧

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊13 分享