行轉列的4種方法 有完整例

2021-04-13 22:47:50 字數 1820 閱讀 7970

1.0

有兩個表,例如:

table1:

姓名   性別   年齡

張三   男     22

李四   男     19

table2:

姓名  科目  成績

張三  數學  88

張三  語文  78

李四  數學  79

李四  語文  91

我想查詢的結果是這樣的

姓名  數學  語文

張三   88    78

李四   79    91

**********=

(1)select a.姓名,sum(decode(b.科目,'數學',成績) as 數學,

sum(decode(b.科目,'語文',成績) as 語文

from table1 a,table2 b where a.姓名=b.姓名

group by a.姓名

(2)declare v_sql varchar2(4000):='select a.姓名,';

cursor cur_name is select distinct 科目 from table2;

begin

for c in cur_name loop

v_sql:=v_sql||'max(decode(b.科目,'||c.科目||',b.成績))'''||c.科目||''',';

end loop;

v_sql:=substr(v_sql,1,length(v_sql)-1)||' from table1 a,table2 b where a.姓名=b.姓名

group by a.姓名';

execute immediate v_sql;

(3)create table table1( cname varchar2(100),c*** varchar2(100),cage int )

insert into table1

select '張三','男',22 from dual

union

select '李四','男',19 from dual;

create table table2(cname varchar2(100),km varchar2(100),cj int )

insert into table2

select '張三','數學',88 from dual

union

select '張三','語文',78 from dual

union

select '李四','數學',79 from dual

union

select '李四','語文',91 from dual;

==select

a.cname,

max(decode(b.km,'數學',b.cj)) as 數學,

max(decode(b.km,'語文',b.cj)) as 語文

from

table1 a,table2 b

where

a.cname=b.cname

group by

a.cname

(4)select  a.stu_name,

(select b.stu_score  from dev.table2 b where b.stu_name=a.stu_name and b.stu_course='數學') math,

(select b.stu_score  from dev.table2 b where b.stu_name=a.stu_name and b.stu_course='語文') chinese

from dev.table1 a 

mysql行轉列的兩種方法

建表語句 create table tb 姓名 varchar 10 課程 varchar 10 分數 int insert into tb values 張三 語文 74 insert into tb values 張三 數學 83 insert into tb values 張三 物理 93 i...

oracle 行轉列 列轉行的幾種方法

這裡我介紹幾種簡單的方法 行轉列 1.oracle的pivot函式 原表 使用pivot函式 with temp as select 四川省 nation 成都市 city,第一 ranking from dual union all select 四川省 nation 綿陽市 city,第二 ra...

sql語句實現行轉列的3種方法

前言 一般在做資料統計的時候會用到行轉列,假如要統計學生的成績,資料庫裡查詢出來的會是這樣的,但這並不能達到想要的效果,所以要在查詢的時候做一下處理。select n 張三 n 語文 60 union allselect n 李四 n 數學 70 union allselect n 王五 n 英語 ...