從Oracle 表格行列轉置說起第1/2頁建站知識
導讀:1建站知識當你面對如下格式的一個表格:NO為人員的ID,MONEY是收入,DAY是星期(1代表星期一,7代表周日)。網站建設網站建設公司。
NO MONEY DAY
1 23 1
1 43 2
1 -45 3
2 42 1
2 -10 2
2 50 3
3 100 8
為了符合閱讀習慣,最終報表希望是如下格式:
NO MON TUE THR
1 23 43 -45
2 42 -10 50
3
------------------------
咱們一步步來實現:
1.運用DECODE轉換行為列
SQL:
SELECT NO, DECODE(DAY,1,MONEY,'') DAY1, DECODE(DAY,2,MONEY,'') DAY2, DECODE(DAY,3,MONEY,'') DAY3FROM TEMP
結果:
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;
結果:
NO MON TUE THR
1 23 43 -45
2 42 -10 50
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):
NO MON TUE THR
1 23 43 0
2 42 0 50
3 0 0 0
2.高端網站建設列缺省值設置(DAY值為8的顯示為'undefined')
SQL:
SELECT NO,MONEY, seo網站優化軟件 DECODE(DAY,1,'MON',2,'TUE',3,'THR','unde百度seo網站優化fined') DAYFROM TEMP
結果:
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.行列轉化在表單內數據量較大的情況下消耗較大
原因:
1.掃描目標數據時間開銷大。
2.GROUP BY時,數據冗余帶來的多行合并。
優點:
表結構穩定:DAY增加新值只需增加記錄,無需新增新列!
下一頁 decode()函數使用技巧相關網站建設網站建設公司。聲明: 本文由我的SEOUC技術文章主頁發布于:2023-05-22 ,文章從Oracle 表格行列轉置說起第1/2頁建站知識主要講述行列,表格,從Oracle 表格行列轉置說起第1/2頁建站網站建設源碼以及服務器配置搭建相關技術文章。轉載請保留鏈接: http://www.bifwcx.com/article/web_5095.html