Sql的行列(纵横表)转换

1、行转列:

表结构和数据:

 1 DROP TABLE IF EXISTS `kj`;
 2 CREATE TABLE `kj` (
 3   `姓名` varchar(50) DEFAULT NULL,
 4   `课程` varchar(255) DEFAULT NULL,
 5   `分数` varchar(255) DEFAULT NULL
 6 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 7 
 8 
 9 INSERT INTO `kj` VALUES ('张三', '语文', '98');
10 INSERT INTO `kj` VALUES ('张三', '数学', '96');
11 INSERT INTO `kj` VALUES ('张三', '英语', '99');
12 INSERT INTO `kj` VALUES ('李四', '语文', '92');
13 INSERT INTO `kj` VALUES ('李四', '数学', '97');
14 INSERT INTO `kj` VALUES ('李四', '化学', '99');
View Code
 1 SELECT
 2     姓名,
 3     sum(
 4         CASE 课程
 5         WHEN '语文' THEN
 6             分数
 7         ELSE
 8             0
 9         END
10     ) 语文,
11     sum(
12         CASE 课程
13         WHEN '数学' THEN
14             分数
15         ELSE
16             0
17         END
18     ) 数学,
19     sum(
20         CASE 课程
21         WHEN '化学' THEN
22             分数
23         ELSE
24             0
25         END
26     ) 化学
27 FROM
28     kj
29 GROUP BY
30     姓名;
View Code

2、列转行

表结构和数据:

 1 DROP TABLE IF EXISTS `fs`;
 2 CREATE TABLE `fs` (
 3   `姓名` varchar(255) DEFAULT NULL,
 4   `语文` varchar(255) DEFAULT NULL,
 5   `化学` varchar(255) DEFAULT NULL,
 6   `数学` varchar(255) DEFAULT NULL
 7 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 8 
 9 INSERT INTO `fs` VALUES ('张三', '98', '96', '0');
10 INSERT INTO `fs` VALUES ('李四', '92', '97', '99');
View Code
1 SELECT 姓名,语文 as 课程 from fs UNION ALL SELECT 姓名,化学 as 课程 from fs UNION SELECT 姓名,数学 as 课程 from fs  
View Code

 

转载于:https://www.cnblogs.com/xiaofengfree/p/10209141.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值