DECLARE  @RQ1  VARCHAR(10)  
DECLARE  @RQ2  VARCHAR(10)  
DECLARE  @YZ  VARCHAR(80)  
DECLARE  @RY  VARCHAR(10)  
 
SELECT  ID=MAX(ys),YP=max(mc),DJ=MAX(dj),GG=max(GG),SL=sum(SL),DW=max(jldw),money=CAST(sum(dj*SL)  AS  VARCHAR(10))    
FROM  
(SELECT  KYZYS,YS=RY.MC,YP.MC,SL,YP.JLDW,YP.DJ,ZD.GG,YZ1.YZBM  
FROM  ZY_YFQLD200702  YF  
LEFT  JOIN  ZY_BFYZ0  YZ  ON  YF.YZGROUPID=YZ.MGROUPID  
LEFT  JOIN  ZD_RY  RY  ON  YZ.KYZYS=RY.BM  
LEFT  JOIN  ZD_YP  YP  ON  YF.YZBM=YP.BM  
LEFT  JOIN  ZY_BFYZ1  YZ1  ON  YZ.MGROUPID=YZ1.DGROUPID  
LEFT  JOIN  ZD_YZ  ZD  ON  YP.BM=ZD.BM  
WHERE  YF.YZGROUPID=YZ1.DGROUPID  
UNION    
SELECT  KYZYS,YS=RY.MC,YP.MC,SL,YP.JLDW,YP.DJ,ZD.GG,YZ1.YZBM  
FROM  ZY_YFQLD YF1  
LEFT  JOIN  ZY_BFYZ0  YZ  ON  YF1.YZGROUPID=YZ.MGROUPID  
LEFT  JOIN  ZD_RY  RY  ON  YZ.KYZYS=RY.BM  
LEFT  JOIN  ZD_YP  YP  ON  YF1.YZBM=YP.BM  
LEFT  JOIN  ZY_BFYZ1  YZ1  ON  YZ.MGROUPID=YZ1.DGROUPID  
LEFT  JOIN  ZD_YZ  ZD  ON  YP.BM=ZD.BM  
WHERE  YF1.YZGROUPID=YZ1.DGROUPID  
)  
AS  TOTAL  
GROUP  BY  KYZYS,YZBM  问题是两份表列"SL"的值相加居然比一份表的列"SL"还少,不知道问题出在哪里了!

解决方案 »

  1.   

    你将union 换成union all,
      

  2.   

    谢谢你。不过这是两列,如果再加3列,4列,union都换成union all的话,机子就没响应了。如果还有多列需要相加的话,该怎么用呢?
      

  3.   

    Union
    返回对两个集合进行 union 运算所生成的集合,可以保留重复的成员。语法
    Union(«Set1», «Set2»[, ALL])替代语法 1
    {«Set1», «Set2»}替代语法 2
    «Set1» + «Set 2»注释
    此函数返回 «Set1» 和 «Set2» 的 union 运算结果,并在默认情况下消除重复项。ALL 标志表示在并集中保留重复项。从尾部删除重复项。 也可以将逗号分隔的集合列表用括号括起来或使用 + 运算符,通过 union 算法合并集合。例如:{USA.Children, CANADA.Children}与{USA.Children} + {CANADA.Children}等同于Union(USA.Children, CANADA.Children, ALL)使用替代语法时始终保留重复的成员。