mysql动态行转列



?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DROP  TABLE  IF EXISTS `score`;
CREATE  TABLE  `score` (
   `id`  int (11)  NOT  NULL  AUTO_INCREMENT,
   `class`  varchar (255)  DEFAULT  NULL ,
   `score`  double  DEFAULT  NULL ,
   `userid`  int (11)  DEFAULT  NULL ,
   PRIMARY  KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8  DEFAULT  CHARSET=latin1;
 
INSERT  INTO  `score`  VALUES  ( '1' 'math' '90' '1' );
INSERT  INTO  `score`  VALUES  ( '2' 'english' '90' '1' );
INSERT  INTO  `score`  VALUES  ( '3' 'computer' '80' '1' );
INSERT  INTO  `score`  VALUES  ( '4' 'sports' '90' '1' );
INSERT  INTO  `score`  VALUES  ( '5' 'math' '80' '2' );
INSERT  INTO  `score`  VALUES  ( '6' 'english' '85' '2' );
INSERT  INTO  `score`  VALUES  ( '7' 'computer' '100' '2' );

查询语句

?
1
2
3
4
5
6
7
SET  @EE= '' ;
set  @str_tmp= '' ;
SELECT  @EE:=CONCAT(@EE, 'SUM(IF(class=\'' ,class, '\'' , ',score,0)) AS ' ,class, ',' as  aa  into  @str_tmp  FROM  ( SELECT  DISTINCT  class  FROM  score) A  order  by  length(aa)  desc  limit 1; 
SET  @QQ=CONCAT( 'SELECT ifnull(score.userid,\'total\'),' , LEFT (@str_tmp,char_length(@str_tmp)-1), '  ,SUM(score) AS TOTAL FROM score GROUP BY userid WITH ROLLUP' );
PREPARE  stmt   FROM  @QQ; 
EXECUTE  stmt ;
deallocate  prepare  stmt;

原来的记录:

新查询出的结果:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DROP  TABLE  IF EXISTS `score`;
CREATE  TABLE  `score` (
   `id`  int (11)  NOT  NULL  AUTO_INCREMENT,
   `class`  varchar (255)  DEFAULT  NULL ,
   `score`  double  DEFAULT  NULL ,
   `userid`  int (11)  DEFAULT  NULL ,
   PRIMARY  KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8  DEFAULT  CHARSET=latin1;
 
INSERT  INTO  `score`  VALUES  ( '1' 'math' '90' '1' );
INSERT  INTO  `score`  VALUES  ( '2' 'english' '90' '1' );
INSERT  INTO  `score`  VALUES  ( '3' 'computer' '80' '1' );
INSERT  INTO  `score`  VALUES  ( '4' 'sports' '90' '1' );
INSERT  INTO  `score`  VALUES  ( '5' 'math' '80' '2' );
INSERT  INTO  `score`  VALUES  ( '6' 'english' '85' '2' );
INSERT  INTO  `score`  VALUES  ( '7' 'computer' '100' '2' );

查询语句

?
1
2
3
4
5
6
7
SET  @EE= '' ;
set  @str_tmp= '' ;
SELECT  @EE:=CONCAT(@EE, 'SUM(IF(class=\'' ,class, '\'' , ',score,0)) AS ' ,class, ',' as  aa  into  @str_tmp  FROM  ( SELECT  DISTINCT  class  FROM  score) A  order  by  length(aa)  desc  limit 1; 
SET  @QQ=CONCAT( 'SELECT ifnull(score.userid,\'total\'),' , LEFT (@str_tmp,char_length(@str_tmp)-1), '  ,SUM(score) AS TOTAL FROM score GROUP BY userid WITH ROLLUP' );
PREPARE  stmt   FROM  @QQ; 
EXECUTE  stmt ;
deallocate  prepare  stmt;

原来的记录:

新查询出的结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值