求教~分别(汇总)查询12个月的数据 (改过)
小弟要查询:
1 2 3 ····· 11 12 (月份)
(nameID)name 数据 数据 数据 ····· 数据 数据
(nameID)name 数据 数据 数据 ····· 数据 数据
表:
T1: peopleID(int)(主键) times(datetime) nameID(int)姓名ID name(姓名)
T2: listID(int)(主键) peopelID(int)(T1中的主键) charge(decimal)花费
T2中会存在多条包含peopleID的数据, 需要通过T1的times来区分出12个月,通过peopleID来关联到T2中,进行汇总(charge)查询出NameID花费的总金额;
T1: T2:
peopleID times nameID name listID peopelID charge
1 2006-01-12 1 张三 10 1 50
2 2006-01-11 1 张三 11 2 100
3 2006-01-02 2 李四 12 3 500
4 2006-02-02 2 李四 13 4 600
需要得到结果:
1 2 ·······11 12
张三 150
李四 500 600 ·······11 12
谢谢~~
[解决办法]
select
a.name,
[01]=sum(case datepart(mm,times) when 1 then charge else 0 end),
[02]=sum(case datepart(mm,times) when 2 then charge else 0 end),
[03]=sum(case datepart(mm,times) when 3 then charge else 0 end),
[04]=sum(case datepart(mm,times) when 4 then charge else 0 end),
[05]=sum(case datepart(mm,times) when 5 then charge else 0 end),
[06]=sum(case datepart(mm,times) when 6 then charge else 0 end),
[08]=sum(case datepart(mm,times) when 8 then charge else 0 end),
[09]=sum(case datepart(mm,times) when 9 then charge else 0 end),
[10]=sum(case datepart(mm,times) when 10 then charge else 0 end),
[11]=sum(case datepart(mm,times) when 11 then charge else 0 end),
[12]=sum(case datepart(mm,times) when 12 then charge else 0 end)
from
T1 a,T2 b
where
a.peopleID=b.peopleID
group by
a.name
[解决办法]
create table t1(peopleID int, times datetime , nameID int , name varchar(50))
insert t1 select 1, '2006-01-12 ', 1, '张三 '
union all select 2, '2006-01-11 ', 1, '张三 '
union all select 3, '2006-01-02 ', 2, '李四 '
union all select 4, '2006-02-02 ', 2, '李四 '
create table t2(listID int , peopelID int , charge decimal)
insert t2 select 10, 1, 50
union all select 11, 2, 100
union all select 12, 3, 500
union all select 13, 4, 600
--如果只是1年的数据:
declare @sql varchar(2000)
set @sql= ' '
select @sql=@sql+ ',[ '+rtrim(times)+ '月]=sum(case month(times) when '+rtrim(times)+ ' then charge else 0 end) '
from (select month(times)times from T1 group by month(times))ta
set @sql= 'select name '+@sql+ ' from t1 join t2 on t1.peopleID=t2.peopelID group by name '
print @sql
exec(@sql)
name 1月 2月
-------------------------------------------------- ---------------------------------------- ----------------------------------------
李四 500 600
张三 150 0