IT忍者神龜之 oracle行轉列 列轉行

2021-06-26 05:23:45 字數 2132 閱讀 8560

一、行轉列

需要將如下格式

轉換為:

這就是最常見的行轉列,主要原理是利用decode函式、聚集函式(sum),結合group by分組實現的

[sql]view plain

copy

create

table test(  

id varchar2(255) primary

keynot

null,  

name varchar2(255),  

course varchar2(255),  

score varchar2(255)  

);  

insert

into test values(sys_guid(),'zhangsan','語文',85);  

insert

into test values(sys_guid(),'zhangsan','數學',78);  

insert

into test values(sys_guid(),'zhangsan','英語',90);  

insert

into test values(sys_guid(),'lisi','語文',73);  

insert

into test values(sys_guid(),'lisi','數學',84);  

insert

into test values(sys_guid(),'lisi','英語',92);  

行轉列sql語句為:

[sql]view plain

copy

select t.name,   

sum(decode(t.course, '語文', score,null)) as chinese,   

sum(decode(t.course, '數學', score,null)) as math,   

sum(decode(t.course, '英語', score,null)) as english   

from test t   

group

by t.name

order

by t.name

二、列轉行

將如下格式

轉換為

這就是最常見的列轉行,主要原理是利用sql裡面的union

[sql]view plain

copy

create

table test(  

id varchar2(255) primary

keynot

null,  

name varchar2(255),  

ch_score   varchar2(255),  

math_score varchar2(255),  

en_score   varchar2(255)  

);  

insert

into test values(sys_guid(),'zhangsan',88,76,90);  

insert

into test values(sys_guid(),'lisi',91,67,82);  

列轉行sql語句為:

[sql]view plain

copy

select

name, '語文' course , ch_score as score from test    

union

select

name, '數學' course, math_score as score from test    

union

select

name, '英語' course, en_score as score from test    

order

byname,course  

IT忍者神龜之oracle集合的使用

每組查詢均能得到其結果集,若需將多個查詢結果合併成乙個結果集,則可利用集合運算來實現。如並集 union 並集且不去除重複行 unoin all 交集 intersect 差集 minus 集合命令的目的是將兩個 含以上 sql語句產生的結果合併。由於需要將兩個 含以上 資料集合並 因此字段數量必須...

IT忍者神龜之Windows安裝MySQL解壓版本

今天有位同事問我mysql解壓版本怎麼用 我就他做了乙個文件 1 解壓 2 設定環境變數 3 修改my.ini mysqld basedir d mysql server mysql 5.6.20 win32 datadir d mysql server data port 3306 4 安裝mys...

IT忍者神龜之Easyui擴充套件驗證回顧

extend fn.validatebox.defaults.rules,d a za z0 9 i.test value message 身份證號碼格式不正確 minlength message 請輸入至少 2 個字元.length message 輸入內容長度必須介於和之間.phone d 0 ...