码迷,mamicode.com
首页 > 数据库 > 详细

Mysql-sql行转列

时间:2019-01-05 13:29:13      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:select   har   item   from   png   判断   date   需要   网址   

原始数据如下图所示:(商品的销售明细)
date=业务日期;Item=商品名称;saleqty=销售数量

技术分享图片

-- 建立测试数据(表)
create table test (Date varchar(10), item char(10),saleqty int);
insert test values(‘2010-01-01‘,‘AAA‘,8);
insert test values(‘2010-01-02‘,‘AAA‘,4);
insert test values(‘2010-01-03‘,‘AAA‘,5);
insert test values(‘2010-01-01‘,‘BBB‘,1);
insert test values(‘2010-01-02‘,‘CCC‘,2);
insert test values(‘2010-01-03‘,‘DDD‘,6);

 

 

实现的方法和思路如下:两个方法

-- 实现结果的静态SQL语句写法
-- 整理报表需要的格式

方法一:case item when x then xx when y then yy end  

select date,
case item when ‘AAA‘ then saleqty end as AAA,
case item when ‘BBB‘ then saleqty end as BBB,
case item when ‘CCC‘ then saleqty end as CCC,
case item when ‘DDD‘ then saleqty end as DDD
from test;

方法二:if(条件判断,成立结果,不成立结果)

select date,
if (item = ‘AAA‘,saleqty,null) as AAA,
if (item = ‘BBB‘,saleqty,null) as BBB,
if (item = ‘CCC‘,saleqty,null) as CCC,
if (item = ‘DDD‘,saleqty,null) as DDD
from test;

技术分享图片

 

-- 按日期汇总行

select date,
sum(case item when ‘AAA‘ then saleqty end)as AAA,
sum(case item when ‘BBB‘ then saleqty end)as BBB,
sum(case item when ‘CCC‘ then saleqty end)as CCC,
sum(case item when ‘DDD‘ then saleqty end)as DDD
from test group by date;

select date,
sum(if (item = ‘AAA‘,saleqty,null)) as AAA,
sum(if (item = ‘BBB‘,saleqty,null)) as BBB,
sum(if (item = ‘CCC‘,saleqty,null)) as CCC,
sum(if (item = ‘DDD‘,saleqty,null)) as DDD
from test group by date;

技术分享图片

 

 

-- 处理数据:将空值的栏位填入数字0;

select date,
ifnull(sum(case item when ‘AAA‘ then saleqty end) ,0)as AAA,
ifnull(sum(case item when ‘BBB‘ then saleqty end) ,0)as BBB,
ifnull(sum(case item when ‘CCC‘ then saleqty end) ,0)as CCC,
ifnull(sum(case item when ‘DDD‘ then saleqty end) ,0)as DDD
from test group by date;

select date,
ifnull(sum(if (item = ‘AAA‘,saleqty,null)),0) as AAA,
ifnull(sum(if (item = ‘BBB‘,saleqty,null)),0) as BBB,
ifnull(sum(if (item = ‘CCC‘,saleqty,null)),0) as CCC,
ifnull(sum(if (item = ‘DDD‘,saleqty,null)),0) as DDD
from test group by date;

技术分享图片

静态SQL语句编写完成!

其实有一步骤有点多余:可以直接if(,,0),而不是if(,,null)

select date,
if (item = ‘AAA‘,saleqty,0) as AAA,
if (item = ‘BBB‘,saleqty,0) as BBB,
if (item = ‘CCC‘,saleqty,0) as CCC,
if (item = ‘DDD‘,saleqty,0) as DDD
from test;

技术分享图片

 

select date,
sum(if (item = ‘AAA‘,saleqty,0)) as AAA,
sum(if (item = ‘BBB‘,saleqty,0)) as BBB,
sum(if (item = ‘CCC‘,saleqty,0)) as CCC,
sum(if (item = ‘DDD‘,saleqty,0)) as DDD
from test group by date;

技术分享图片

 静态SQL语句编写完成!

 

参考网址https://www.cnblogs.com/ShaYeBlog/p/3594517.html

 

Mysql-sql行转列

标签:select   har   item   from   png   判断   date   需要   网址   

原文地址:https://www.cnblogs.com/wqbin/p/10223894.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!