SQL行转列、列转行
来源:互联网 发布:pdf虚拟打印机软件 编辑:程序博客网 时间:2024/05/16 14:36
SQL行转列、列转行
这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。
一、整理测试数据
create table wyc_test(id int(32) not null auto_increment,name varchar(80) default null,date date default null,scount int(32),primary key (id));INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (1,'小说','2013-09-01',10000);INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (2,'微信','2013-09-01',20000);INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (3,'小说','2013-09-02',30000);INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (4,'微信','2013-09-02',35000);INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (5,'小说','2013-09-03',31000);INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (6,'微信','2013-09-03',36000);INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (7,'小说','2013-09-04',35000);INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (8,'微信','2013-09-04',38000);INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (9,'小说','2013-09-01',80000);INSERT INTO `wyc_test` (`id`,`name`,`date`,`scount`) VALUES (10,'微信','2013-09-01',70000);
二、行转列
主要思路是分组后使用case进行条件判断处理
#行转列select a.date, sum(case a.name when '小说' then a.scount else 0 end) 'sum_小说', max(case a.name when '小说' then a.scount else 0 end) 'max_小说', sum(case a.name when '微信' then a.scount else 0 end) '微信', max(case a.name when '小说' then a.scount else 0 end) 'max_微信'from wyc_test agroup by date;
结果:
三、列转行
主要思路也是分组后使用case
#列转行select a.date, concat('小说:', cast(sum(case a.name when '小说' then a.scount else 0 end) as char), '微信', cast(sum(case a.name when '微信' then a.scount else 0 end) as char)) as 'str'from wyc_test agroup by a.date;#列转行#1.使用mysql提供的函数分组select a.date,group_concat(a.name,'总量:', a.scount) from wyc_test a group by a.date,a.name;#2.使用mysql提供的函数分组select a.date,a.name, group_concat(a.name, '总量:', a.scount) from wyc_test a group by a.date,a.name;#3.普通group结合字符串拼接SELECT a.date, concat('小说总量:', cast(sum(case a.name when '小说' then a.scount else 0 end) as char)) as '小说', concat('微信总量:', cast(sum(case a.name when '微信' then a.scount else 0 end) as char)) as '微信'from wyc_test agroup by a.date;结果:
四、数据资料
1.http://www.cnblogs.com/lhj588/p/3315876.html
0 0
- SQL行转列 列转行
- SQL行转列,列转行
- SQL 列转行/行转列
- SQL行转列,列转行
- SQL行转列,列转行
- SQL行转列、列转行
- sql行转列,列转行
- SQL 行转列 列转行
- SQL列转行及行转列
- sql列转行,行转列(临时)
- SQL 行转列和列转行
- sql行转列和列转行
- SQL 行转列和列转行
- SQL列转行及行转列
- sql 列转行 行转列 sql实用技能
- SQL SERVER 2000/2005 列转行 行转列
- SQL SERVER 2000/2005 列转行 行转列
- SQL——行转列,列转行
- 第14周OJ平台项目——杨辉三角
- Python笔记-排序算法实现(1)
- 使用ViewPager时报出The application’s PagerAdapter changed the adapter’s contents without calling PagerAda
- jdk小工具之jps
- 实验二 循环链表和双向链表的设计和实现
- SQL行转列、列转行
- 【Android】基础总结篇之一:Activity生命周期
- JUnit基础及第一个单元测试实例
- 实验三 约瑟夫环和集合的相关运算的设计和实现
- C语言中三目运算符及其应用
- 收藏2个mongodb connector网址
- JSP和ASP.NET到底谁才是未来的主宰
- ubuntu中fstab文件
- 实验四 顺序栈和链队列的操作