数据库:横表纵表互换
来源:互联网 发布:淘宝手机找回是真的吗 编辑:程序博客网 时间:2024/06/06 01:46
下文是一个数据库纵表转横表的设计。感觉这个案例还是比较典型的。
对于我这种对于数据库不是很熟悉的人来说。还是很有指导意义的。
use test;/** * 创建表 */create table sales(id int primary key auto_increment,years year(4) not null,month int not null,sales int not null); /** * 初始化数据 */insert into sales(years, month, sales) values('2011', 1, 3);insert into sales(years, month, sales) values('2011', 2, 2);insert into sales(years, month, sales) values('2011', 3, 4);insert into sales(years, month, sales) values('2011', 4, 1); insert into sales(years, month, sales) values('2012', 1, 1);insert into sales(years, month, sales) values('2012', 2, 2);insert into sales(years, month, sales) values('2012', 3, 2);insert into sales(years, month, sales) values('2012', 4, 3); select * from sales; /** * 纵表变横表(聚合函数max/sum) */select b.years, max(case b.month when 1 then sales else 0 end) '一月', max(case b.month when 2 then sales else 0 end) '二月', max(case b.month when 3 then sales else 0 end) '三月', max(case b.month when 4 then sales else 0 end) '四月'from sales as bgroup by b.years; /** * 纵表变横表(存储过程+ 临时表+左联结) */drop procedure if exists sp_change;drop table if exists a1,a2,a3,a4; delimiter //create procedure sp_change() begin create temporary table a1(years year(4),`一月` int) engine = Memory; create temporary table a2(years year(4),`二月` int) engine = Memory; create temporary table a3(years year(4),`三月` int) engine = Memory; create temporary table a4(years year(4),`四月` int) engine = Memory; insert into a1 select a.years, a.sales as '一月' from sales as a where a.month = 1 ; insert into a2 select b.years, b.sales as '二月' from sales as b where b.month = 2 ; insert into a3 select c.years, c.sales as '三月' from sales as c where c.month = 3 ; insert into a4 select d.years, d.sales as '四月' from sales as d where d.month = 4 ; select a1.years as year,a1.`一月`,a2.`二月`,a3.`三月`,a4.`四月` from a1 left join a2 on a1.years = a2.years left join a3 on a2.years = a3.years left join a4 on a3.years = a4.years order by a1.years; drop table if exists a1,a2,a3,a4; end //delimiter ;call sp_change(); /** * 横表变纵表 */select a.years, a.sales as '一月' from sales as a where a.month = 1 unionselect b.years, b.sales as '二月' from sales as b where b.month = 2 union select c.years, c.sales as '三月' from sales as c where c.month = 3 union select d.years, d.sales as '四月' from sales as d where d.month = 4 ;
0 0
- 数据库:横表纵表互换
- [SQLServer]数据库行列互换
- 数据库行列互换
- 数据库行列互换
- 数据库,同一张表两条数据互换
- 数据库转换工具(access excel 互换)
- PowerDesigner 数据库逆向工程,建name和comment 互换
- 行列互换
- 货币互换
- 整数互换
- 互换内容
- 行列互换
- 行列互换
- 整数互换
- 互换内容
- 序号互换
- 行列互换
- 大小写互换
- spring学习笔记: Spring AOP
- php导入excel
- 123123
- UVa 816 Abbott's Revenge(状态压缩BFS)
- iOS文件的操作与相关的属性
- 数据库:横表纵表互换
- 将汉字文档添加进 sqlite3 数据库
- jQuery Validate验证框架详解
- Unity3D架构系列之- FSM有限状态机设计六(总结)
- html显示列表分页的方法
- 五种IO模型性能分析
- 大学前程宝
- axis2 环境搭建过程中产生的错误分析
- When Linux Runs Out of Memory