前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库表行列转换

数据库表行列转换

作者头像
一觉睡到小时候
发布2019-07-03 18:17:38
1.1K0
发布2019-07-03 18:17:38
举报
文章被收录于专栏:国产程序员国产程序员

行转列:

创建表kecheng,并插入数据

代码语言:javascript
复制
  insert into kecheng (id, name, course, score)
 values (1, '张三', '语文', 67);
 insert into kecheng (id, name, course, score)
 values (1, '张三', '数学', 76);
 insert into kecheng (id, name, course, score)
 values (1, '张三', '英语', 43);
 insert into kecheng (id, name, course, score)
 values (1, '张三', '历史', 56);
 insert into kecheng (id, name, course, score)
 values (1, '张三', '化学', 11);
 insert into kecheng (id, name, course, score)
 values (2, '李四', '语文', 54);
 insert into kecheng (id, name, course, score)
 values (2, '李四', '数学', 81);
 insert into kecheng (id, name, course, score)
 values (2, '李四', '英语', 64);
 insert into kecheng (id, name, course, score)
 values (2, '李四', '历史', 93);
 insert into kecheng (id, name, course, score)
 values (2, '李四', '化学', 27);
 insert into kecheng (id, name, course, score)
 values (3, '王五', '语文', 24);
 insert into kecheng (id, name, course, score)
 values (3, '王五', '数学', 25);
 insert into kecheng (id, name, course, score)
 values (3, '王五', '英语', 8);
 insert into kecheng (id, name, course, score)
 values (3, '王五', '历史', 45);
 insert into kecheng (id, name, course, score)
 values (3, '王五', '化学', 1);

查询该表,结构显示:

通过sql查询显示下图:

SQL_A:

代码语言:javascript
复制
select  name,
sum(case when course='语文' then score end) as 语文,
sum(case when course='数学' then score end) as 数学,
sum(case when course='英语' then score end) as 英语,
sum(case when course='历史' then score end) as 历史,
sum(case when course='化学' then score end) as 化学
from kecheng group by name;

SQL_B:

代码语言:javascript
复制
select distinct k.`name` AS name,
(select score from kecheng where name = k.`name` and course = '语文' )as 语文,
(select score from kecheng where name = k.`name` and course = '数学' )as 数学,
(select score from kecheng where name = k.`name` and course = '英语' )as 英语,
(select score from kecheng where name = k.`name` and course = '历史' )as 历史,
(select score from kecheng where name = k.`name` and course = '化学' )as 化学
from kecheng k;

SQL_C:

代码语言:javascript
复制
SELECT name AS name,
SUM(IF(`course`='语文',score,0)) AS 语文,
SUM(IF(`course`='数学',score,0)) AS 数学,
SUM(IF(`course`='英语',score,0)) AS 英语,
SUM(IF(`course`='历史',score,0)) AS 历史,
SUM(IF(`course`='化学',score,0)) AS 化学
FROM kecheng
GROUP BY name;

SQL_A和SQL_B和SQL_C都能达到效果。

列转行:

创建表score

添加数据:

代码语言:javascript
复制
insert into score(USER_NAME, CN_SCORE, MATH_SCORE, EN_SCORE) values
("张三", 34, 58, 58),
("李四", 45, 87, 45),
("王五", 76, 34, 89);

SQL:

代码语言:javascript
复制
select user_name, '数学' COURSE, MATH_SCORE as SCORE from score
union all
select user_name, '英语' COURSE, EN_SCORE as SCORE from score
union all
select user_name, '语文' COURSE, CN_SCORE as SCORE from score
order by user_name,COURSE;

效果:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 国产程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档