当日,当年,当月是什么概念?
如果test1数据如上,
TEST2
      DDD(INT)    EEE(CHAR)
      1             ASD
      2             ASD
      5             ASDSAD

TEST3  中hhh=ASD的记录有几条??
如果一条,DANGRI      DANGYUE应该什么数?
如果多条,怎么区分??

解决方案 »

  1.   

    select b.EEE,datepart(yy,a.CCC),sum(a.BBB) from test1 a, test2 b where a.AAA=b.DDD
    group by datepart(yy,CCC),b.EEE
      

  2.   

    谢谢!
    当日,当月,当年是对今天来说的,比如今天是2002年12月19号,那当日就是2002年12月19号,当月是2002年12月,当年是指2002年。HHH字段中的ASD只可能有一条。DANGRI ,DANGYUE ,DANGNIAN 字段应该是BBB字段的合计数
      

  3.   

    海阔大侠,您是指BBB字段的数据?我想在TEST1和TEST2上都做触发器,在数据有修改的时候就对TEST3进行更新(或是删除原来的数据,在插入更新后的数据)
      

  4.   

    谢谢海阔大侠,TEST3这个表是准备用来做报表的(非本人意愿,中间这个表肯定是要的),我想在TEST1,TEST2表有更动时从新对TEST3表的数据全部删除,然后将新数据计算好之后再插入进去。不知海阔大侠有什么建议
      

  5.   

    正是这个问题,如果每次TEST1,TEST2表有更动时,都需要删除所有TEST3表的数据,重新统计,至少不如不用触发器,需要汇总数据的时候再查询(因为触发器大部分工作是无效的,而且很影响性能)。如果用触发器的话,就应该分析好逻辑,保证每次只修改很少的数据。
      

  6.   

    试一下这个触发器。create trigger tr_test1
    on test1
    for insert,update,delete
    as
    select eee,ccc,bbb
    into #temp1
    from inserted i,test2 t
    where i.aaa=t.ddd
    union all
    select eee,ccc,bbb
    from deleted d,test2 t
    where d.aaa=t.dddselect eee,sum(bbb) as dangri
    into #temp2
    from #temp1
    where convert(char(8),ccc,112)=convert(char(8),getdate(),112)update test3
    set dangri=test3.dangri+t.dangri
    from test3,#Temp2 t
    where test3.hhh=t.eeeinsert test3(hhh,dangri,dangyue,dangnian)
    select eee,dangri,0,0 from #Temp2 t
    where not exists (
    select * from test3 where where test3.hhh=t.eee)drop table #Temp2select eee,sum(bbb) as dangyue
    into #temp3
    from #temp1
    where year(ccc)=year(getdate())
    and  month(ccc)=month(getdate())update test3
    set dangyue=test3.dangyue+t.dangyue
    from test3,#Temp3 t
    where test3.hhh=t.eeeinsert test3(hhh,dangri,dangyue,dangnian)
    select eee,0,dangyue,0 from #Temp3 t
    where not exists (
    select * from test3 where where test3.hhh=t.eee)drop table #Temp3select eee,sum(bbb) as dangnian
    into #temp4
    from #temp1
    where year(ccc)=year(getdate())
    update test3
    set dangnian=test3.dangnian+t.dangnian
    from test3,#Temp4 t
    where test3.hhh=t.eeeinsert test3(hhh,dangri,dangyue,dangnian)
    select eee,0,0,dangnian from #Temp4 t
    where not exists (
    select * from test3 where where test3.hhh=t.eee)drop table #Temp4go