year month amount
1991 1 1.1
1991 2 1.2
1991 3 1.3
1991 4 1.4
1992 1 2.1
1992 2 2.2
1992 3 2.3
1992 4 2.4
查成这样一个结果
year m1 m2 m3 m4
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4
===================
已有如下解法:
--1M:
SELECT YEAR,
SUM(CASE WHEN MONTH='1' THEN AMOUNT END) M1,
SUM(CASE WHEN MONTH='2' THEN AMOUNT END) M2,
SUM(CASE WHEN MONTH='3' THEN AMOUNT END) M3,
SUM(CASE WHEN MONTH='4' THEN AMOUNT END) M4
FROM AAA
GROUP BY YEAR --2M:
select year,
(select amount from aaa m where month=1 and m.year=b.year) as m1,
(select amount from aaa m where month=2 and m.year=b.year) as m2,
(select amount from aaa m where month=3 and m.year=b.year) as m3,
(select amount from aaa m where month=4 and m.year=b.year) as m4
from aaa b group by year --3M: maybe only used on oracle
SELECT YEAR,
MAX(DECODE(MONTH,1,AMOUNT,0)) M1,
MAX(DECODE(MONTH,2,AMOUNT,0)) M2,
MAX(DECODE(MONTH,3,AMOUNT,0)) M3,
MAX(DECODE(MONTH,4,AMOUNT,0)) M4
FROM AAA
GROUP BY YEAR
但是感觉这些写法有点局限,都把月给写死了,如果月份是变化的,好像就有问题,请高手们看看,谢谢!
1991 1 1.1
1991 2 1.2
1991 3 1.3
1991 4 1.4
1992 1 2.1
1992 2 2.2
1992 3 2.3
1992 4 2.4
查成这样一个结果
year m1 m2 m3 m4
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4
===================
已有如下解法:
--1M:
SELECT YEAR,
SUM(CASE WHEN MONTH='1' THEN AMOUNT END) M1,
SUM(CASE WHEN MONTH='2' THEN AMOUNT END) M2,
SUM(CASE WHEN MONTH='3' THEN AMOUNT END) M3,
SUM(CASE WHEN MONTH='4' THEN AMOUNT END) M4
FROM AAA
GROUP BY YEAR --2M:
select year,
(select amount from aaa m where month=1 and m.year=b.year) as m1,
(select amount from aaa m where month=2 and m.year=b.year) as m2,
(select amount from aaa m where month=3 and m.year=b.year) as m3,
(select amount from aaa m where month=4 and m.year=b.year) as m4
from aaa b group by year --3M: maybe only used on oracle
SELECT YEAR,
MAX(DECODE(MONTH,1,AMOUNT,0)) M1,
MAX(DECODE(MONTH,2,AMOUNT,0)) M2,
MAX(DECODE(MONTH,3,AMOUNT,0)) M3,
MAX(DECODE(MONTH,4,AMOUNT,0)) M4
FROM AAA
GROUP BY YEAR
但是感觉这些写法有点局限,都把月给写死了,如果月份是变化的,好像就有问题,请高手们看看,谢谢!
先查一遍下表
year month amount
1991 1 1.1
1991 2 1.2
1991 3 1.3
1991 4 1.4
1992 1 2.1
1992 2 2.2
1992 3 2.3
1992 4 2.4
然后把不重复的年月得到最好是按照年月拼接起来
然后用循环拼接成
v_MOTH:=V_MOTH || MAX(DECODE(MONTH,1,AMOUNT,0)) (这个拼接语句你自己写吧!)
然后再在最终的sql语句里把变量拼接进去!
SELECT YEAR, || v_MOTH ||
FROM AAA
GROUP BY YEAR
上面给你介绍的是一个思路,具体的代码要你自己去写!