mysql把结果变横表_mysql 纵表变横表

mysql> show create table t1;

+——-+—————————————————————————————————————————————————–+

| Table | Create Table |

+——-+—————————————————————————————————————————————————–+

| t1 | CREATE TABLE `t1` (

`mon` varchar(50) DEFAULT NULL,

`dep` varchar(10) DEFAULT NULL,

`yj` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=gbk |

+——-+—————————————————————————————————————————————————–+

1 row in set

mysql> show create table t2;

+——-+—————————————————————————————————————————+

| Table | Create Table |

+——-+—————————————————————————————————————————+

| t2 | CREATE TABLE `t2` (

`dep` varchar(10) DEFAULT NULL,

`dname` varchar(20) DEFAULT NULL

) ENGINE=MyISAM DEFAULT CHARSET=gbk |

+——-+—————————————————————————————————————————+

1 row in set

insert into t1 values

(‘一月份’,’01′,10),

(‘一月份’,’02′,10),

(‘一月份’,’03′,5 ),

(‘二月份’,’02′,8 ),

(‘二月份’,’04′,9 ),

(‘三月份’,’03′,8 );

insert into t2 values

(’01′,’国内业务一部’),

(’02′,’国内业务二部’),

(’03′,’国内业务三部’),

(’04′,’国际业务部’);

mysql——-

select distinct(t1.dep),tt1.yj 一月份 ,tt2.yj 二月份,tt3.yj 三月份 from

t1

left join (select dep,yj from t1 where mon=’一月份’) tt1 on

tt1.dep=t1.dep

left join (select dep,yj from t1 where mon=’二月份’) tt2 on

tt2.dep=t1.dep

left join (select dep,yj from t1 where mon=’三月份’) tt3 on

tt3.dep=t1.dep

;

+—–+——–+——–+——–+

| dep | 一月份 | 二月份 | 三月份 |

+—–+——–+——–+——–+

| 01 | 10 | NULL | NULL |

| 02 | 10 | 8 | NULL |

| 03 | 5 | NULL | 8 |

| 04 | NULL | 9 | NULL |

+—–+——–+——–+——–+

mysql——–

select a.dname,

max(if(b.mon=’一月份’,b.yj,0)) 一月份,

max(if(b.mon=’二月份’,b.yj,0)) 二月份,

max(if(b.mon=’三月份’,b.yj,0)) 三月份

from t2 a left join t1 b on a.dep=b.dep

group by dname

mysql——-

select a.dname,

sum(case when b.mon=’一月份’ then b.yj else 0 end) 一月份,

sum(case when b.mon=’二月份’ then b.yj else 0 end) 二月份,

sum(case when b.mon=’三月份’ then b.yj else 0 end) 三月份

from t2 a left join t1 b on a.dep=b.dep

group by dname

oracle——注:decode的方法与mysql的不同

select a.dname,

max(decode(b.mon,’一月份’,b.yj,0) 一月份,

max(decode(b.mon,’二月份’,b.yj,0) 二月份,

max(decode(b.mon,’三月份’,b.yj,0) 三月份)

from table2 a left join table1 b on a.dep=b.dep

group by dname

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值