1. 程式人生 > >MySQL中橫表和豎表相互轉換

MySQL中橫表和豎表相互轉換

order by png image mar 插入數據 group src then images

一 豎表轉橫表

1. 首先創建豎表

create table student (

  id varchar(32) primary key,

  name varchar (50) not null,

  subject varchar(50) not null,

  result int);

2. 插入數據

insert into student (id, name, subject, result) values (‘0001‘, ‘小明‘, ‘語文‘, 83);

insert into student (id, name, subject, result) values (‘0002‘, ‘小明‘, ‘數學‘, 97);

insert into student (id, name, subject, result) values (‘0003‘, ‘小明‘, ‘英語‘, 93);

insert into student (id, name, subject, result) values (‘0004‘‘, ‘小白‘, ‘語文‘, 93);

insert into student (id, name, subject, result) values (‘0005‘, ‘小白‘, ‘數學‘, 93);

insert into student (id, name, subject, result) values (‘0006‘, ‘小白‘, ‘英語‘, 95);

3. 查詢數據

select * from student;

技術分享

4. 想要將數據顯示為橫表, 即如下形式

技術分享

廢話不多說了, 直接上sql語句:

select name as ‘姓名‘,
  max(case subject when ‘語文‘ then result else 0 end) ‘語文‘,
  max(case subject when ‘數學‘ then result else 0 end) ‘數學‘,
  max(case subject when ‘英語‘ then result else 0 end) ‘英語‘
from student group by name;

二, 橫表變豎表

1. 創建橫表

create table student1 (
id varchar(32) primary key,
姓名 varchar(50) not null,
語文 int,
數學 int,
物理 int
);

2. 插入數據

insert into student1 (id, 姓名, 語文, 數學, 物理) values (‘0001‘,‘小張‘, 93, 84, 99);
insert into student1 (id, 姓名, 語文, 數學, 物理) values (‘0002‘,‘小馬‘, 86, 92, 90);

3. 查詢數據

select * from student1;

技術分享

4. 將橫表數據轉換為豎表的形式, 即如下形式:

技術分享

對應的sql語句:

select*from
(
select 姓名 as Name , ‘語文‘ as Subject , 語文 as result from student1
union all
select 姓名 as Name , ‘數學‘ as Subject , 數學 as result from student1
union all
select 姓名 as Name , ‘物理‘ as Subject , 物理 as result from student1
) t
order by name;

MySQL中橫表和豎表相互轉換