MySQL 动态行转列
2015-06-29 10:43
609 查看
CREATE TABLE `tbl01` (
`id` INT(11) DEFAULT NULL,
`kemu` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
INSERT INTO tbl01(id, kemu) VALUES ('1', '语文');
INSERT INTO tbl01(id, kemu) VALUES ('2', '数学');
INSERT INTO tbl01(id, kemu) VALUES ('3', '英语');
INSERT INTO tbl01(id, kemu) VALUES ('4', '物理');
INSERT INTO tbl01(id, kemu) VALUES ('5', '化学');
CREATE TABLE `tbl02` (
`nid` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`kemu` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`chji` INT(11) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
INSERT INTO tbl02 (nid, kemu, chji) VALUES ('李明', '1', '95');
INSERT INTO tbl02 (nid, kemu, chji) VALUES ('李明', '2', '89');
INSERT INTO tbl02 (nid, kemu, chji) VALUES ('李明', '4', '74');
INSERT INTO tbl02 (nid, kemu, chji) VALUES ('张三', '1', '81');
INSERT INTO tbl02 (nid, kemu, chji) VALUES ('张三', '3', '65');
INSERT INTO tbl02 (nid, kemu, chji) VALUES ('张三', '5', '38');
SET @sql := 'SELECT nid';
SELECT @sql := CONCAT(@sql, ', max(case kemu when ', id, ' then chji else 0 end) as ', kemu)
FROM (SELECT DISTINCT id, kemu FROM tbl01) AS a;
SELECT @sqlstr := CONCAT(@sql, ' from tbl02 group by nid');
PREPARE rc FROM @sqlstr;
EXECUTE rc;
统计每个人各年级的总成绩:
SET @sql := 'SELECT xm';
SELECT @sql := CONCAT(@sql, ', sum(case nj when ', nj, ' then cj else 0 end) as `', nj, '年级`')
FROM (SELECT nj FROM tbl03 GROUP BY nj) AS a;
SELECT @sqlstr := CONCAT(@sql, ' from tbl03 group by xm');
PREPARE rc FROM @sqlstr;
EXECUTE rc;
`id` INT(11) DEFAULT NULL,
`kemu` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
INSERT INTO tbl01(id, kemu) VALUES ('1', '语文');
INSERT INTO tbl01(id, kemu) VALUES ('2', '数学');
INSERT INTO tbl01(id, kemu) VALUES ('3', '英语');
INSERT INTO tbl01(id, kemu) VALUES ('4', '物理');
INSERT INTO tbl01(id, kemu) VALUES ('5', '化学');
CREATE TABLE `tbl02` (
`nid` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`kemu` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`chji` INT(11) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
INSERT INTO tbl02 (nid, kemu, chji) VALUES ('李明', '1', '95');
INSERT INTO tbl02 (nid, kemu, chji) VALUES ('李明', '2', '89');
INSERT INTO tbl02 (nid, kemu, chji) VALUES ('李明', '4', '74');
INSERT INTO tbl02 (nid, kemu, chji) VALUES ('张三', '1', '81');
INSERT INTO tbl02 (nid, kemu, chji) VALUES ('张三', '3', '65');
INSERT INTO tbl02 (nid, kemu, chji) VALUES ('张三', '5', '38');
SET @sql := 'SELECT nid';
SELECT @sql := CONCAT(@sql, ', max(case kemu when ', id, ' then chji else 0 end) as ', kemu)
FROM (SELECT DISTINCT id, kemu FROM tbl01) AS a;
SELECT @sqlstr := CONCAT(@sql, ' from tbl02 group by nid');
PREPARE rc FROM @sqlstr;
EXECUTE rc;
统计每个人各年级的总成绩:
SET @sql := 'SELECT xm';
SELECT @sql := CONCAT(@sql, ', sum(case nj when ', nj, ' then cj else 0 end) as `', nj, '年级`')
FROM (SELECT nj FROM tbl03 GROUP BY nj) AS a;
SELECT @sqlstr := CONCAT(@sql, ' from tbl03 group by xm');
PREPARE rc FROM @sqlstr;
EXECUTE rc;
相关文章推荐
- javaweb JDBC 数据库连接mysql 配置代码 (直接可用)
- MySQL分表
- 使用 ibdata 和 frm 文件恢复 MySQL 数据库
- mysql几种存储引擎介绍
- mysql有序插入研究part2
- MySQL的锁机制
- mysql触发器讲解
- 初涉MySQL
- mysql 常用命令
- PostgreSQL 与 MySQL 相比,优势何在?
- mac mysql 修改密码
- MySQL查看数据库相关信息
- mysql 表字段增、删、改
- MySql索引的学习
- Mysql事务隔离级别
- MySQL分区简介
- MySQL的log-bin的日志功能
- mysql安装和应用
- mysql count distinct 统计结果去重
- windows下非安装版 mysql配置