请看以下代码
select max(a.存货编码) as 存货编码,max(a.存货名称) as 存货名称,max(a.存货规格描述) as 存货规格描述,max(a.客户型号) as 客户型号,max(a.订单号) as 订单号,
isnull(sum(a.数量),0) as 入库总数量, isnull(sum(b.数量),0) as 发货总数量,isnull(sum(a.数量),0)-isnull(sum(b.数量),0) as 库存数量
from 成品入库子表 a full join 发货单子表 b on a.订单号 = b.订单号 and  a.AUTOID = b.AUTOID 
group by a.订单号,b.订单号,a.AUTOID,b.AUTOID 
因为 a表 和 b表 都有可能比对方要多,所以必须要用 full join,但实际上sum(a.数量),sum(b.数量)的结果是错误的,不知道为什么,

解决方案 »

  1.   

    isnull(sum(a.数量),0) as 入库总数量
    改为
    sum(isnull(a.数量,0)) as 入库总数量
    其他同.
      

  2.   

    sum(a.数量) 假如数量中有部分为null,不会影响最终结果吧,
      

  3.   

    isnull(sum(a.数量),0) as 入库总数量(这部分的结果是正确的), isnull(sum(b.数量),0) as 发货总数量(这部分的结果是错误的),帮我找一下原因吧
      

  4.   

    sum(数量),当数量有NULL时,结果是NULL,因为,NULL值与任何值运算的结果总为NULL.
    所以要先将可能存在NULL的值转为0,再求和,而不是先求和再去检查是否为NULL.因为即使你查到是NULL,转为0了,但那只是最终结果,运算过程中的数据被NULL掉了.
    这样,
    isnull(sum(a.数量),0) as 入库总数量 

    sum(isnull(a.数量,0)) as 入库总数量 
    之间的差别,你就应该能看出来了. 
      

  5.   

    正确的,是因为那里面当前统计的每一行都有具体的值,不是NULL,所以正确.但你能保证今后可能遇到的所有值都不是NULL吗?如果是,那外面套上个ISNULL函数有什么意义呢?
      

  6.   

    你所谓的结果错误是指的什么呢?你检查下你group by后面的东西是你要的东西吗?
      

  7.   

    isnull(sum(b.数量),0) as 发货总数量(这部分的结果是错误的),,得出来的运算结果是错误的,比应该的结果数值要大,其总和只是在订单号分组,就好像没有分组a.AUTOID,b.AUTOID