表结构
table1
custno   applno  otherfield
2010100  00001   ....
2010200  00001   ....
2010300  00001   ....
2010400  00001   ....
table2
custno   applno  tran_amt   owe_amt  tran_type
2010100  00001   1000       0         2
2010100  00001   1000       0         2
2010100  00001   0          500       3
2010100  00001   0          500       7
2010200  00001   1000       0         2
2010200  00001   0          5000      3
2010300  00001   2000       0         2
2010300  00001   0          4000      7我要查询的结果数据
custno   applno  sum(tran_amt) sum(owe_amt)
2010100  00001   2000            1000
2010200  00001   1000            5000
2010100  00001   1000            4000
2010100  00001   0               0我的难点是在统计sum(tran_amt)和sum(owe_amt)上.
如,我的第一条数据的sum(tran_amt)=2000是查询table1中的custno和applno在table2中对应的custno和applno并且tran_type=2的数据的tran_amt的sum,
sum(owe_amt)=1000是对应的tran_type=3或7的数据的owe_amt的sum
如果在table1中的custno和applno在table2中没有对应的custno和applno的数据,那么sum(tran_amt) sum(owe_amt)都要做为0 处理如最后一条数据.
下面的数据一样!
求高手指点这个SQL语句怎么写?谢谢

解决方案 »

  1.   

    custno   applno  sum(tran_amt) sum(owe_amt)
    2010100  00001   2000            1000
    2010200  00001   1000            5000
    2010100  00001   1000            4000
    2010100  00001   0               0这个结果有点问题吧?
    2010300 ...
    2010400 ...
    数据呢?
      

  2.   

    select a.custno,a.applno,
    sum(decode(nvl(b.custno,-1),-1,0, decode(a.tran_type,2,a.tran_amt,0) ) ) s_trac_amt,
    sum(decode(nvl(b.custno,-1),-1,0, decode(a.tran_type,3,a.owe_amt,7,a.owe_amt,0))) s_owe_amt
    from table2 a,table1 b
    where a.custno=b.custno(+) and a.applno=b.applno(+)
      

  3.   

    select custno,applno,
           sum(decode(tran_type,2,tran_amt,0) sum_tran_amt,
           sum(decode(tran_type,3,owe_amt,7,owe_amt,0) sum_owe_amt
    from table1 left outer jion table2 
                   on  table1.custno =table2.custno 
                   and table1.applno =table2.applno 
    group by custno,applno
      

  4.   

    select table1.custno,table1.applno,sum(decode(tran_type,2,tran_amt,0),sum(decode(tran_type,2,0,owe_amt)) 
    from table2 right join table1 
    on table2.custno = table1.custno and table2.applno = table1.applno
    group by table1.custno,table1.appno结果:
    custno   applno  sum(tran_amt) sum(owe_amt)
    2010100  00001   2000            1000
    2010200  00001   1000            5000
    2010300  00001   2000            4000
    2010400  00001   0               0
      

  5.   

    select b.custno,b.applno,
    sum(decode(nvl(b.custno,-1),-1,0, decode(a.tran_type,2,a.tran_amt,0) ) ) s_trac_amt,
    sum(decode(nvl(b.custno,-1),-1,0, decode(a.tran_type,3,a.owe_amt,7,a.owe_amt,0))) s_owe_amt
    from table2 a,table1 b
    where a.custno=b.custno(+) and a.applno=b.applno(+)
      

  6.   

    select b.custno,b.applno,
    sum(decode(nvl(a.custno,-1),-1,0, decode(a.tran_type,2,a.tran_amt,0) ) ) s_trac_amt,
    sum(decode(nvl(a.custno,-1),-1,0, decode(a.tran_type,3,a.owe_amt,7,a.owe_amt,0))) s_owe_amt
    from table2 a,table1 b
    where a.custno=b.custno(+) and a.applno=b.applno(+)