select 科目编号, sum(case 月份 when '1' then 金额 else 0 end) [1月份], sum(case 月份 when '2' then 金额 else 0 end) [2月份], sum(case 月份 when '3' then 金额 else 0 end) [3月份], (select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (1,2,3)) [1季度平均], sum(case 月份 when '4' then 金额 else 0 end) [4月份], sum(case 月份 when '5' then 金额 else 0 end) [5月份], sum(case 月份 when '6' then 金额 else 0 end) [6月份], (select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (4,5,6)) [2季度平均], sum(case 月份 when '7' then 金额 else 0 end) [7月份], sum(case 月份 when '8' then 金额 else 0 end) [8月份], sum(case 月份 when '9' then 金额 else 0 end) [9月份], (select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (7,8,9)) [3季度平均], sum(case 月份 when '10' then 金额 else 0 end) [10月份], sum(case 月份 when '11' then 金额 else 0 end) [11月份], sum(case 月份 when '12' then 金额 else 0 end) [12月份], (select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (10,11,12)) [4季度平均] from tb t group by 科目编号
select 科目编号, avg(case 月份 when 1 then 金额 else 0 end) as 1月份, avg(case 月份 when 2 then 金额 else 0 end) as 2月份, avg(case 月份 when 3 then 金额 else 0 end) as 3月份, avg(case when 月份 between 1 and 3 then 金额 else 0 end) as 1季度平均, avg(case 月份 when 4 then 金额 else 0 end) as 4月份, avg(case 月份 when 5 then 金额 else 0 end) as 5月份, avg(case 月份 when 6 then 金额 else 0 end) as 6月份, avg(case when 月份 between 4 and 6 then 金额 else 0 end) as 2季度平均, avg(case 月份 when 7 then 金额 else 0 end) as 7月份, avg(case 月份 when 8 then 金额 else 0 end) as 8月份, avg(case 月份 when 9 then 金额 else 0 end) as 9月份, avg(case when 月份 between 7 and 10 then 金额 else 0 end) as 3季度平均, avg(case 月份 when 10 then 金额 else 0 end) as 10月份, avg(case 月份 when 11 then 金额 else 0 end) as 11月份, avg(case 月份 when 12 then 金额 else 0 end) as 12月份, avg(case when 月份 between 11 and 12 then 金额 else 0 end) as 3季度平均 from tab group by 科目编号
SELECT [科目编号],AVG([金额]) FROM TB GROUP BY [科目编号] select [科目编号], sum(case 月份 when '1' then 金额 else 0 end) [1月份], sum(case 月份 when '2' then 金额 else 0 end) [2月份], sum(case 月份 when '3' then 金额 else 0 end) [3月份], (select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (1,2,3)) [1季度平均], sum(case 月份 when '4' then 金额 else 0 end) [4月份], sum(case 月份 when '5' then 金额 else 0 end) [5月份], sum(case 月份 when '6' then 金额 else 0 end) [6月份], (select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (4,5,6)) [2季度平均], sum(case 月份 when '7' then 金额 else 0 end) [7月份], sum(case 月份 when '8' then 金额 else 0 end) [8月份], sum(case 月份 when '9' then 金额 else 0 end) [9月份], (select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (7,8,9)) [3季度平均], sum(case 月份 when '10' then 金额 else 0 end) [10月份], sum(case 月份 when '11' then 金额 else 0 end) [11月份], sum(case 月份 when '12' then 金额 else 0 end) [12月份], (select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (10,11,12)) [4季度平均] from tb t group by [科目编号] 来晚了,只能复制前辈们的代码混点分了.
FROM TB
GROUP BY [科目编号]
from xxxx
group by 科目编号
from tb
group by 科目编号
insert into tb values('001' , 230 )
insert into tb values('001' , 250 )
insert into tb values('002' , 850 )
insert into tb values('002' , 120 )
goselect 科目编号 , cast(avg(金额*1.0) as varchar(18,2)) from tb group by 科目编号drop table tb/*
科目编号
---------- ------------------
001 240.000000
002 485.000000(所影响的行数为 2 行)*/
from xxxx
group by 科目编号
科目编号,avg(金额) as 金额
from
tb
group by
科目编号
select 科目编号,avg(金额)
from 表名
group by 科目编号
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
sum(case 月份 when '1' then 金额 else 0 end) [1月份],
sum(case 月份 when '2' then 金额 else 0 end) [2月份],
sum(case 月份 when '3' then 金额 else 0 end) [3月份],
(select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (1,2,3)) [1季度平均],
sum(case 月份 when '4' then 金额 else 0 end) [4月份],
sum(case 月份 when '5' then 金额 else 0 end) [5月份],
sum(case 月份 when '6' then 金额 else 0 end) [6月份],
(select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (4,5,6)) [2季度平均],
sum(case 月份 when '7' then 金额 else 0 end) [7月份],
sum(case 月份 when '8' then 金额 else 0 end) [8月份],
sum(case 月份 when '9' then 金额 else 0 end) [9月份],
(select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (7,8,9)) [3季度平均],
sum(case 月份 when '10' then 金额 else 0 end) [10月份],
sum(case 月份 when '11' then 金额 else 0 end) [11月份],
sum(case 月份 when '12' then 金额 else 0 end) [12月份],
(select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (10,11,12)) [4季度平均]
from tb t
group by 科目编号
表结构:
create table tab
(
科目编号 varchar(20),
月份 int,
金额 double
)表数据:
id 科目编号 月份 金额
1 001 1 350
2 001 1 750
3 002 2 550
4 003 1 150
5 002 3 155
6 004 1 950
7 003 4 122
想得到以下结果:科目编号 1月份 2月份 3月份 1季度平均 4月份 5月份 .......12月份 4季度平均
001 1100 0 0 1100 0 0 0 0
avg(case 月份 when 1 then 金额 else 0 end) as 1月份,
avg(case 月份 when 2 then 金额 else 0 end) as 2月份,
avg(case 月份 when 3 then 金额 else 0 end) as 3月份,
avg(case when 月份 between 1 and 3 then 金额 else 0 end) as 1季度平均,
avg(case 月份 when 4 then 金额 else 0 end) as 4月份,
avg(case 月份 when 5 then 金额 else 0 end) as 5月份,
avg(case 月份 when 6 then 金额 else 0 end) as 6月份,
avg(case when 月份 between 4 and 6 then 金额 else 0 end) as 2季度平均,
avg(case 月份 when 7 then 金额 else 0 end) as 7月份,
avg(case 月份 when 8 then 金额 else 0 end) as 8月份,
avg(case 月份 when 9 then 金额 else 0 end) as 9月份,
avg(case when 月份 between 7 and 10 then 金额 else 0 end) as 3季度平均,
avg(case 月份 when 10 then 金额 else 0 end) as 10月份,
avg(case 月份 when 11 then 金额 else 0 end) as 11月份,
avg(case 月份 when 12 then 金额 else 0 end) as 12月份,
avg(case when 月份 between 11 and 12 then 金额 else 0 end) as 3季度平均
from tab
group by 科目编号
FROM TB
GROUP BY [科目编号]
select [科目编号],
sum(case 月份 when '1' then 金额 else 0 end) [1月份],
sum(case 月份 when '2' then 金额 else 0 end) [2月份],
sum(case 月份 when '3' then 金额 else 0 end) [3月份],
(select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (1,2,3)) [1季度平均],
sum(case 月份 when '4' then 金额 else 0 end) [4月份],
sum(case 月份 when '5' then 金额 else 0 end) [5月份],
sum(case 月份 when '6' then 金额 else 0 end) [6月份],
(select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (4,5,6)) [2季度平均],
sum(case 月份 when '7' then 金额 else 0 end) [7月份],
sum(case 月份 when '8' then 金额 else 0 end) [8月份],
sum(case 月份 when '9' then 金额 else 0 end) [9月份],
(select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (7,8,9)) [3季度平均],
sum(case 月份 when '10' then 金额 else 0 end) [10月份],
sum(case 月份 when '11' then 金额 else 0 end) [11月份],
sum(case 月份 when '12' then 金额 else 0 end) [12月份],
(select cast(avg(金额*1.0) as varchar(18,2)) from tb where 科目编号 = t.科目编号 and 月份 in (10,11,12)) [4季度平均]
from tb t
group by [科目编号]
来晚了,只能复制前辈们的代码混点分了.