關於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