我这有三张表。一张是商品表。里面有如:
(shangpin)商品表                商品进货单(spjhd)               商品退货单
  商品代码(spdm)   名称                商品代码    进货数量 (sl1)          商品代码   退货数量(sl2)
  8818c20       花色衬衫             ...          10           8818c20     3
  6617d30       白色棉衣             ...           2           ...         1
  ...           .....             ...           6             ...        2我用左联结。让进货单和退货单联结商品表(商品表里面包含所有的商品代码和名) 然后想求出实际进货数(进货一退货)
 我的公式如这样。
    select a.spdm,sl1 as 进货,sl2 as 退货,(sl1-sl2) as 实际进货 from shangpin as a
    left join spjhd as b  on a.spdm=b.spdm 
    left join spthd as c on a.spdm=c.spdm
  但是得出来的结果如下:    spdm |  进货 |   退货 |  实际进货 |
   8819c20   10     null    null
   8862c30   6       3        3  
   ......    null     10     null如果在商品表里面有的代码。而在进货或者退货里面没有发生过数据。就会返回null  值。因为null值实际进货得出来的数字就不准确。如。进货为null 退货有3件。实际进货数还是null 反之也是一样。

解决方案 »

  1.   

    用SQL的CASE 语句啊,,
    select a.spdm,sl1 as 进货,sl2 as 退货,
    case
      when sl2 is null then sl1
      when sl2 is not null then sl1-sl2
    end as 实际进货 from shangpin as a 
        left join spjhd as b  on a.spdm=b.spdm 
        left join spthd as c on a.spdm=c.spdm 
      

  2.   


    select a.spdm,sl1 as 进货,sl2 as 退货,(sl1-sl2) as 实际进货 from shangpin as a 
        inner  join spjhd as b on a.spdm=b.spdm 
        inner  join spthd as c on a.spdm=c.spdm 
      

  3.   

    select A.spdm,isNull(B.sl1,0) 进货,isNull(C.sl2,0) 退货,isNull(isNull(B.sl1,0)-isNull(C.sl2,0),0) 实际进货 
    from  @shangpin A 
    Left join @spjhd B on A.spdm=B.spdm 
    Left join @spthd C on  A.spdm=C.spdm/* 结果是:
      spdm    进货  退货   实际进货  
      -------------------------------
      8819c20  10    0    10 
      8862c30  6     3    3  
      ......   0    10    -10有进货,而没有退货时,退货0表示,实际进货=进货
    有进货,有退货时,进货,退货正常表示,实际进货=进货-退货
    没有进货,有退货时,进货0表示,实际进货=退货(负数表示)
    */
      

  4.   

    --如果没有进货,有退货时,实际进货想用0表示,则改一下:select A.spdm,isNull(B.sl1,0) 进货,isNull(C.sl2,0) 退货,
    case when isNull(isNull(B.sl1,0)-isNull(C.sl2,0),0)<0 then 0 else isNull(isNull(B.sl1,0)-isNull(C.sl2,0),0) end  实际进货 
    from  @shangpin A 
    Left join @spjhd B on A.spdm=B.spdm 
    Left join @spthd C on  A.spdm=C.spdm/* 结果是: 
      spdm    进货  退货  实际进货  
      ------------------------------- 
      8819c20  10    0    10 
      8862c30  6    3    3  
      ......    0    10    0
    */