首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求教~分别(汇总)查询12个月的数据 (改过),该如何处理

2011-12-27 
求教~分别(汇总)查询12个月的数据 (改过)小弟要查询:123·····1112(月份)(nameID)name数据数据数据·····数

求教~分别(汇总)查询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

热点排行