救灾,SQL查询!
救急,SQL查询!!!
表:
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
希望有各种数据库版本的查询语句
------解决方案--------------------
SELECT year,SUM(CASE WHEN month=1 THEN amount ELSE 0 END ) AS M1,
SUM(CASE WHEN month=2 THEN amount ELSE 0 END ) AS M2,
SUM(CASE WHEN month=3 THEN amount ELSE 0 END ) AS M3,
SUM(CASE WHEN month=4 THEN amount ELSE 0 END ) AS M4
FROM TT GROUP BY year
MYSQL :
CASE WHEN->IF
SELECT year,SUM(IF(month=1,amount,0)) AS M1,...SUM(IF(month=N,amount,0)) AS MN
FROM TT GROUP BY year
------解决方案--------------------
动态的参考
http://topic.****.net/u/20090530/23/0b782674-4b0b-4cf5-bc1a-e8914aaee5ab.html?17482
中我的回答
SQLSERVER思路是相同的
------解决方案--------------------
参考下贴中的多种方法
http://blog.****.net/acmain_chm/article/details/4283943
------解决方案--------------------
表:
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
希望有各种数据库版本的查询语句
------解决方案--------------------
SELECT year,SUM(CASE WHEN month=1 THEN amount ELSE 0 END ) AS M1,
SUM(CASE WHEN month=2 THEN amount ELSE 0 END ) AS M2,
SUM(CASE WHEN month=3 THEN amount ELSE 0 END ) AS M3,
SUM(CASE WHEN month=4 THEN amount ELSE 0 END ) AS M4
FROM TT GROUP BY year
MYSQL :
CASE WHEN->IF
SELECT year,SUM(IF(month=1,amount,0)) AS M1,...SUM(IF(month=N,amount,0)) AS MN
FROM TT GROUP BY year
------解决方案--------------------
动态的参考
http://topic.****.net/u/20090530/23/0b782674-4b0b-4cf5-bc1a-e8914aaee5ab.html?17482
中我的回答
SQLSERVER思路是相同的
------解决方案--------------------
参考下贴中的多种方法
http://blog.****.net/acmain_chm/article/details/4283943
------解决方案--------------------
--以下可用于sql server , oracle
select year,
max(case when month = 1 then amount else 0 end) m1,
max(case when month = 2 then amount else 0 end) m2,
max(case when month = 3 then amount else 0 end) m3,
max(case when month = 4 then amount else 0 end) m4
from tb
group by year
--以下可用于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 tb
group by year