国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Oracle - 從Oracle 表格行列轉置說起

從Oracle 表格行列轉置說起

2019-11-07 16:38Oracle教程網 Oracle

當你面對如下格式的一個表格: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,'') DAY3
FROM 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,
    DECODE(DAY,1,'MON',2,'TUE',3,'THR','undefined') DAY
FROM 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()函數使用技巧 

decode()函數使用技巧 
·軟件環境: 
1、Windows NT4.0+ORACLE 8.0.4 
2、ORACLE安裝路徑為:C:\ORANT 
·含義解釋: 
decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,缺省值) 

該函數的含義如下: 
IF 條件=值1 THEN 
    RETURN(翻譯值1) 
ELSIF 條件=值2 THEN 
    RETURN(翻譯值2) 
    ...... 
ELSIF 條件=值n THEN 
    RETURN(翻譯值n) 

ELSE 
    RETURN(缺省值) 
END IF 
· 使用方法: 
1、比較大小 
select decode(sign(變量1-變量2),-1,變量1,變量2) from dual; --取較小值 
sign()函數根據某個值是0、正數還是負數,分別返回0、1、-1 

例如: 
變量1=10,變量2=20 
則sign(變量1-變量2)返回-1,decode解碼結果為“變量1”,達到了取較小值的目的。 


2、表、視圖結構轉化 
現有一個商品銷售表sale,表結構為: 
month    char(6)      --月份 
sell    number(10,2)   --月銷售金額 

現有數據為: 
200001  1000 
200002  1100 
200003  1200 
200004  1300 
200005  1400 
200006  1500 
200007  1600 
200101  1100 
200202  1200 
200301  1300 

想要轉化為以下結構的數據: 
year   char(4)      --年份 
month1  number(10,2)   --1月銷售金額 
month2  number(10,2)   --2月銷售金額 
month3  number(10,2)   --3月銷售金額 
month4  number(10,2)   --4月銷售金額 
month5  number(10,2)   --5月銷售金額 
month6  number(10,2)   --6月銷售金額 
month7  number(10,2)   --7月銷售金額 
month8  number(10,2)   --8月銷售金額 
month9  number(10,2)   --9月銷售金額 
month10  number(10,2)   --10月銷售金額 
month11  number(10,2)   --11月銷售金額 
month12  number(10,2)   --12月銷售金額 

結構轉化的SQL語句為: 
create or replace view 
v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12) 
as 
    select 
    substrb(month,1,4), 
    sum(decode(substrb(month,5,2),'01',sell,0)), 
    sum(decode(substrb(month,5,2),'02',sell,0)), 
    sum(decode(substrb(month,5,2),'03',sell,0)), 
    sum(decode(substrb(month,5,2),'04',sell,0)), 
    sum(decode(substrb(month,5,2),'05',sell,0)), 
    sum(decode(substrb(month,5,2),'06',sell,0)), 
    sum(decode(substrb(month,5,2),'07',sell,0)), 
    sum(decode(substrb(month,5,2),'08',sell,0)), 
    sum(decode(substrb(month,5,2),'09',sell,0)), 
    sum(decode(substrb(month,5,2),'10',sell,0)), 
    sum(decode(substrb(month,5,2),'11',sell,0)), 
    sum(decode(substrb(month,5,2),'12',sell,0)) 
    from sale 
    group by substrb(month,1,4);

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕在线观看日韩 | 狠狠久| 欧美一级久久 | 欧美日韩一区二区三 | 日韩美女在线 | av片在线观看 | xxxx网| 亚洲一级在线 | 国产精品免费在线 | 欧美日视频| 一级特黄录像免费播放全99 | 亚洲精品国产一区 | 国产日韩精品一区 | 精品一区二区av | 99re6在线视频精品免费 | 干干人人| 国产精品成人一区二区三区夜夜夜 | 日韩福利 | 久久精品免费一区二区三区 | 99草视频| 欧美日韩国产精品 | 久久精品国产一区二区电影 | 成人在线看片 | 夜夜摸夜夜操 | 久久天天躁狠狠躁夜夜躁2014 | www中文字幕 | 国产一区二区三区在线免费 | 久久久精品网站 | 日本中文字幕在线观看 | 欧美成人午夜 | 成人午夜影视 | 免费观看国产精品 | 成人精品一区二区三区中文字幕 | 久久精品国产v日韩v亚洲 | 国产免费久久 | 最新国产在线 | 久久韩国 | 在线视频一区二区三区 | 中国大陆高清aⅴ毛片 | 老妇女av| 91精品国产综合久久久久久丝袜 |