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