A表:
PSPID,MONEY
001     200
002     200
004     400B表:
PSPID,MONEY
001     300
002     400
009     600C表:
PSPID,MONEY
001    900
005    300
002    800
想求得这样一个结果
PSPID,MONEY
001    (和)
002    (和)
就是几张表求和
MONEY的类型是decimal我是这样写的:
select (a.money+b.money+c.money) as moeny,a.PSPID
from A a
left join B b on a.PSPID=b.PSPID
left join C c on b.PSPID=c.PSPID 但结果总是这样显示
PSPID MOENY
001   NULL
....请问前辈们?是什么原因呢?

解决方案 »

  1.   

    先把三张表按条件匹配完后使用GROUP BY 来统计SUM的值就行了。
      

  2.   

    因为用left join,如果有某个表里的PSPID不存在,那么就可能出现null了
    所以要判断一下是否为null,为null的设置成0
    oracle数据库的话,可以使用nvl(a.money, 0) + nvl(b.money, 0) + nvl(c.money, 0)
    其他数据库看看有没有相应的函数,没有的话就使用 (case when a.meney is null then 0 else a.money end) +  (case when b.meney is null then 0 else b.money end) + (case when c.meney is null then 0 else c.money end)
    试试看吧
      

  3.   

    sql server:
    select A.PSPID,(A.money+isnull(B.money,0)+isnull(C.money,0)) sum
    from A
    left join B on A.PSPID=B.PSPID
    left join C on A.PSPID=C.PSPID  
      

  4.   

    5楼正解,给你试过了,但不知道你的pspid要全部统计呢?还是以a表为主
      

  5.   

    写了一个全的~
    select d.pspid,sum(d.money) as money from
    (select isnull(a.money,0) as money,a.PSPID
    from A a
    union all
    select isnull(b.money,0) as money,b.PSPID
    from B b
    union all
    select isnull(c.money,0) as money,c.PSPID
    from C c) as d
    group by d.pspid