MySQL中横表和竖表相互转换

Posted rodge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL中横表和竖表相互转换相关的知识,希望对你有一定的参考价值。

一  竖表转横表

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中横表和竖表相互转换的主要内容,如果未能解决你的问题,请参考以下文章

数据库设计---关于建表的时候选择横标和竖表(纵表)的一点思考

MySQL 行列相互转换

XML文件和ABAP内表数据的相互转换(基础篇)

MySQL:IP 地址转换(在常见IP地址现数字之间相互转换)

mysql 时间与字符串相互转换

mysql 时间戳与日期格式的相互转换