你是内联结,用右外连接或左外连接试试。
from a right outer join b on a.cpnum=b.cpnum and b.ym=...
左外连接
  left outer join

解决方案 »

  1.   

    你好,我按照你的意见改了一下,如果用RIGHT OUT JOIN会只返回一行很多NULL的结果。如果用LEFT的话,只会返回A表的数据,而B的那一部分都为NULL啊?请问这是什么回事呢?有什么方法可以做出正确答案啊?
      

  2.   

    啊,对不起,是我搞错条件了。结果是出来了,可是很多项都是NULL,有没有什么方法可以把NULL的都设置为0呢(都是SUM()出来的结果)?另外如果我要计算单价的话是用
    sum(jcsl)/sum(jcje),但是如果SUM(JCJE)的结果是零的话,应该是不行的吧?有什么办法可以解决,谢谢!
      

  3.   

    isnull(sum(isnull(jcsl,0)),0)/isnull(sum(isnull(jcje,0)),1)
      

  4.   

    isnull(xx,0)确实可以使用,但是在除法那里,如jcje/jcsl , 这个jcsl本来就是0 ,所以这个ISNULL根本就不起作用啊,我想如果jcsl是0或null的情况下,jcje/jcsl = 0,这样能做到吗?
      

  5.   

    Raymen:
    你没有发现被除数如果是null已经被我转成1了吗?
      

  6.   

    Raymen:
    你没有发现被除数已经被我转成1了吗?
      

  7.   

    也可以这样:Case isnull(sum(isnull(jcje,0)),0) when 0 then 0
    Else isnull(sum(isnull(jcsl,0)),0)/isnull(sum(isnull(jcje,0)),0)
      

  8.   

    各位大哥,我对SQL语句是一窍不通的啊,实在不懂啊,CASE怎么用,存储过程怎么写,结构、语法是怎么样呢?而且看来我确实需要做个存储过程啊,因为B表的月份字段我需要在程序中传入的,请大家帮个忙吧:),我的语句实际上是这样的:
    select distinct a.allnum ,a.cpname,a.hdname,a.colorname,a.bhname,a.hwname,a.fkname,
      a.psyn,a.qcsl,a.qcjs,sum(b.jcsl) as jcsl,sum(b.jcjs) as jsjs ,sum(b.ccsl) as ccsl, a.qcje/a.qcsl as qcdj ,
       sum(b.ccjs) as ccjs , a.qcsl+sum(b.jcsl)-sum(b.ccsl) as qmsl ,
       a.qcjs+sum(b.jcjs)-sum(b.ccjs) as qmjs
     from pvc_ck11c as a left outer join pvc_year as b
      on b.allnum = a.allnum and b.ym = "200110"
       group by a.allnum,a.cpname,a.hdname,a.colorname,a.bhname,a.hwname,a.fkname,a.psyn,
        a.qcsl,a.qcjs
    其中就是a.qcje/a.qcsl as qcdj计算不出来,因为a.qcsl可能为零。另外b.ym = "200110"
    是调试的时候用的,在程序中可能不能传过去啊,所以拜托大哥帮忙看看,帮我转为存储过程好吗,我看到例子就知道下面几个类似的该怎么错了,求求大虾可怜,你要多少分都可以,我还有1000多可用分的
      

  9.   

    to:IronPromises(铁诺),我看到了,但是不行啊,ISNULL是在数据为NULL的时候才起作用的,可是数据是0而不是NULL啊,所以转不了啊。Divide by zero error encountered,麻烦再想想吧
      

  10.   

    select distinct a.allnum ,a.cpname,a.hdname,a.colorname,a.bhname,a.hwname,a.fkname,
      a.psyn,a.qcsl,a.qcjs,sum(b.jcsl) as jcsl,sum(b.jcjs) as jsjs ,sum(b.ccsl) as ccsl,(case isnull(a.qcsl,0)  when 0 then 0 else isnull(a.qcje,0)/a.qcsl )as qcdj ,
      sum(b.ccjs) as ccjs , a.qcsl+sum(b.jcsl)-sum(b.ccsl) as qmsl ,
      a.qcjs+sum(b.jcjs)-sum(b.ccjs) as qmjs
    from pvc_ck11c as a left outer join pvc_year as b
      on b.allnum = a.allnum and b.ym = "200110"
      group by a.allnum,a.cpname,a.hdname,a.colorname,a.bhname,a.hwname,a.fkname,a.psyn,
        a.qcsl,a.qcjs
      

  11.   

    (case isnull(a.qcsl,0)  when 0 then 0 else isnull(a.qcje,0)/a.qcsl )as qcdj
    这句话通不过语法检查啊,Incorrect syntax near ')' ,我试着改了几次都不行
      

  12.   

    sorry,是:(case isnull(a.qcsl,0)  when 0 then 0 else isnull(a.qcje,0)/a.qcsl end)as qcdj
      

  13.   

    THANK YOU VERY MUCH,语句运行通过了,再请教如果把这句SQL语句做成存储过程应该怎么写?其中b.ym ="200111"作为输入参数。请再帮我这个忙,分数会继续加的:)