Oracle行轉列和列轉行

2021-07-10 19:21:53 字數 2129 閱讀 9008

一、行轉列

1.1、初始測試資料

表結構:test_tb_grade

sql**:

1    create table test_tb_grade

2    (

3      id        number(10) not null,

4      user_name varchar2(20 char),

5      course    varchar2(20 char),

6      score     float

7    )

初始資料如下圖:

1.2、 如果需要實現如下的查詢效果圖:

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

sql**:

1    select t.user_name,

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

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

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

5    from test_tb_grade t

6    group by t.user_name

7    order by t.user_name

1.3、延伸

如果要實現對各門功課的不同分數段進行統計,效果圖如下:

具體的實現sql如下:

sql**:

01    select t2.score_gp,

02      sum(decode(t2.course, '語文', countnum,null)) as chinese,

03      sum(decode(t2.course, '數學', countnum,null)) as math,

04      sum(decode(t2.course, '英語', countnum,null)) as english

05    from (

06      select t.course,

07             case when t.score  <60 then '00-60'

08                  when t.score >=60 and t.score <80  then '60-80'

09                  when t.score >=80 then '80-100' end as score_gp,

10             count(t.score) as countnum

11      from test_tb_grade t

12      group by t.course, 

13            case when t.score  <60  then '00-60'

14                  when t.score >=60 and t.score <80  then '60-80'

15                  when t.score >=80 then '80-100' end

16      order by t.course ) t2

17    group by t2.score_gp

18    order by t2.score_gp

二、列轉行

1.1、初始測試資料

表結構: test_tb_grade2 

sql**:  

1    create table test_tb_grade2

2    (

3      id         number(10) not null,

4      user_name  varchar2(20 char),

5      cn_score   float,

6      math_score float,

7      en_score   float

8    )

初始資料如下圖:

1.2、 如果需要實現如下的查詢效果圖:

Oracle行轉列和列轉行

1.1 初始測試資料 表結構 test tb grade sql 1 create table test tb grade 2 3 id number 10 not null,4 user name varchar2 20 char 5 course varchar2 20 char 6 score...

Oracle行轉列和列轉行

一 行轉列 1.1 初始測試資料 表結構 test tb grade sql 1 create table test tb grade 2 3 id number 10 not null,4 user name varchar2 20 char 5 course varchar2 20 char 6...

oracle行轉列 列轉行

一 行轉列 需要將如下格式 轉換為 這就是最常見的行轉列,主要原理是利用decode函式 聚集函式 sum 結合group by分組實現的 create table test id varchar2 255 primary key not null,name varchar2 255 course ...