表1:
工号   姓名
11      aaa
22      bbb
表2:
工号    金额     时间
11      12.01  2005-1
11      13     2004-1
22      55     2004-3
22      78     2004-1
实现的功能是:
工号  姓名    发生金额   
            1月    2月    3月  4月。
11    aaa   25.01   0     0    0。
22    bbb   78      0     55    0。 
最好用一句sql语句,谢谢了
select a.*,b.* from yb1 a,(
   select C1,sum(C4),sum(m1),sum(m2),sum(m3),sum(m4),sum(m5),sum(m6),sum(m7),
sum(m8),sum(m9),sum(m10),sum(m11),sum(m12) from(
      select C1,C4,
       max(decode(trunc(D1, 'month'),to_date('2004-01-01','yyyy-mm-dd'),C4,0)) m1,
       max(decode(trunc(D1, 'month'),to_date('2004-02-01','yyyy-mm-dd'),C4,0)) m2,
       max(decode(trunc(D1, 'month'),to_date('2004-03-01','yyyy-mm-dd'),C4,0)) m3,
       max(decode(trunc(D1, 'month'),to_date('2004-04-01','yyyy-mm-dd'),C4,0)) m4,
       max(decode(trunc(D1, 'month'),to_date('2004-05-01','yyyy-mm-dd'),C4,0)) m5,
       max(decode(trunc(D1, 'month'),to_date('2004-06-01','yyyy-mm-dd'),C4,0)) m6,
       max(decode(trunc(D1, 'month'),to_date('2004-07-01','yyyy-mm-dd'),C4,0)) m7,
       max(decode(trunc(D1, 'month'),to_date('2004-08-01','yyyy-mm-dd'),C4,0)) m8,
       max(decode(trunc(D1, 'month'),to_date('2004-09-01','yyyy-mm-dd'),C4,0)) m9,
       max(decode(trunc(D1, 'month'),to_date('2004-10-01','yyyy-mm-dd'),C4,0)) m10,
       max(decode(trunc(D1, 'month'),to_date('2004-11-01','yyyy-mm-dd'),C4,0)) m11,
       max(decode(trunc(D1, 'month'),to_date('2004-12-01','yyyy-mm-dd'),C4,0)) m12
        from(
      select C1,sum(C4) as C4,D1
       from yb2 group by C1,D1)
      group by C1,C4
     )
    group by C1) b
     where a.C1=b.C1(+);
这个能实现,可就是2004年能用,我想不考虑年份,只考虑月份。帮我改改,谢谢

解决方案 »

  1.   

    这位楼主的数据库是oracle,大家加油
      

  2.   

    select a.*,b.* from yb1 a,(
       select C1,sum(C4),sum(m1),sum(m2),sum(m3),sum(m4),sum(m5),sum(m6),sum(m7),
    sum(m8),sum(m9),sum(m10),sum(m11),sum(m12) from(
          select C1,C4,
           max(decode(to_char(D1, 'mm'),'01',C4,0)) m1,
           max(decode(to_char(D1, 'mm'),'02',C4,0)) m2,
           max(decode(to_char(D1, 'mm'),'03',C4,0)) m3,
           max(decode(to_char(D1, 'mm'),'04',C4,0)) m4,
           max(decode(to_char(D1, 'mm'),'05',C4,0)) m5,
           max(decode(to_char(D1, 'mm'),'06',C4,0)) m6,
           max(decode(to_char(D1, 'mm'),'07',C4,0)) m7,
           max(decode(to_char(D1, 'mm'),'08',C4,0)) m8,
           max(decode(to_char(D1, 'mm'),'09',C4,0)) m9,
           max(decode(to_char(D1, 'mm'),'10',C4,0)) m10,
           max(decode(to_char(D1, 'mm'),'11',C4,0)) m11,
           max(decode(to_char(D1, 'mm'),'12',C4,0)) m12
            from(
          select C1,sum(C4) as C4,D1
           from yb2 group by C1,D1)
          group by C1,C4
         )
        group by C1) b
         where a.C1=b.C1(+);
    ===========================================================
      

  3.   

    用存储过程不就得了 max(decode(trunc(D1, 'month'),to_date('2004-12-01','yyyy-mm-dd'),C4,0)) m12
    下下功夫吧