1. 程式人生 > >關於oracle的一個行轉列案例

關於oracle的一個行轉列案例

如下圖所示
這裡寫圖片描述
第一個資料表經過sql語句需要轉換成第二個資料庫表
方法一:

採用case when 轉換


sql語句:select name,
max(case course when ‘JDBC’ then grade else 0 end) jdbc,
max( case course when ‘SPRING’ then grade else 0 end) spring,
max(case course when ‘HIBERNATE’ then grade else 0 end) hibernate
from tb_cource group by name;

方法二:

採用decode 函式


sql語句: select name,
max(decode(course, ‘JDBC’, grade, 0)) as JDBC,
max(decode(course, ‘SPRING’, grade, 0)) as SPRING,
max(decode(course, ‘HIBERNATE’, grade, 0)) as HIBERNATE
from tb_cource
group by name;

方法三:

採用臨時表的方式


先建立一個臨時表,把資料插入到臨時表中,然後,建立表2,表2從臨時表中去取.程式碼如下:
create table test_temp(
name varchar2(10),
spring number(10),
jdbc number(10),
hibernate number(10)
);
見表一插入臨時表
insert into test_temp(
name,
spring,
jdbc,
hibernate
)
select t.name,sum(t.spring),sum(t.jdbc),sum(t.hibernate)
from (
select
name ,
t.grade as spring,
0 as jdbc,
0 as hibernate
from 表一 t
where t.course =’spring’
union all
name ,
0 as spring,
t.grade as jdbc,
0 as hibernate
from 表一 t
where t.course =’jdbc’
name ,
0 as spring,
0 as jdbc,
t.grade as hibernate
from 表一 t
where t.course =’hibernate’
) t group by t.name

以上是根據表格寫的sql語句,沒帶到資料庫驗證,如果執行有錯,歡迎指出