SELECT b.序号,b.货品代码,e.收入数量 AS 累计收入数量,e.发出数量 AS 累计发出数量,e.收入成本货款 AS 累计收入成本,e.发出成本货款 AS 累计发出成本,  b.前缀,b.日期,b.单号,b.退货对应单号,b.收入数量,b.虚拟收入数量,b.发出数量,b.虚拟发出数量,b.单位换算率,b.单价,b.库存单价,b.收入成本, b.发出成本,b.费用,b.可抵扣费用,b.可抵扣费用税金 ,a.[代码] AS 企业代码,a.[名称] AS [企业名称],c.[核算数量],c.[核算成本],c.[核算往来],c.[往来类别] INTO TblCostTemp FROM ((([企业公司] a INNER JOIN  [业务单据] b ON a.[代码]=b.[企业代码]) LEFT JOIN [单据类型] c ON b.[前缀]=c.[前缀])  LEFT JOIN 货品物料 f ON f.代码=b.[货品代码] )  LEFT JOIN (SELECT h.货品代码,SUM(h.[收入数量]) AS 收入数量,SUM(h.[发出数量]) AS 发出数量,SUM(h.[收入成本]) AS 收入成本货款,SUM(h.[发出成本]) AS [发出成本货款]  FROM [业务单据] h   WHERE  h.[日期]<'2008-08-01'  GROUP BY h.货品代码  ) e ON f.代码=e.[货品代码]    WHERE f.isfather=0    AND b.[日期]>='2008-08-01' AND b.[日期]<'2010-08-11'   AND (c.[核算数量]=1 OR c.[核算成本]=1)  

解决方案 »

  1.   

    上条语句没有换行,看起来不方便。 SELECT b.序号,b.货品代码,e.收入数量 AS 累计收入数量,e.发出数量 AS 累计发出数量,e.收入成本货款 AS 累计收入成本,
    e.发出成本货款 AS 累计发出成本,  b.前缀,b.日期,b.单号,b.退货对应单号,b.收入数量,b.虚拟收入数量,b.发出数量,
    b.虚拟发出数量,b.单位换算率,b.单价,b.库存单价,b.收入成本, b.发出成本,b.费用,b.可抵扣费用,
    b.可抵扣费用税金 ,a.[代码] AS 企业代码,a.[名称] AS [企业名称],c.[核算数量],c.[核算成本],c.[核算往来],
    c.[往来类别] INTO TblCostTemp 
    FROM ((([企业公司] a 
    INNER JOIN  [业务单据] b ON a.[代码]=b.[企业代码])
    LEFT JOIN [单据类型] c ON b.[前缀]=c.[前缀])  
    LEFT JOIN 货品物料 f ON f.代码=b.[货品代码] )  
    LEFT JOIN
      (SELECT h.货品代码,SUM(h.[收入数量]) AS 收入数量,SUM(h.[发出数量]) AS 发出数量,SUM(h.[收入成本]) AS 收入成本货款,SUM(h.[发出成本]) AS [发出成本货款]
      FROM [业务单据] h   WHERE  h.[日期]<'2008-08-01'  GROUP BY h.货品代码  ) e ON f.代码=e.[货品代码] 
       WHERE f.isfather=0    AND b.[日期]>='2008-08-01' AND b.[日期]<'2010-08-11'   
    AND (c.[核算数量]=1 OR c.[核算成本]=1)  
      

  2.   

    太多的LEFT jion 你的单据类型 货品物料是基础表吧,在业务单据中没有吗?建议把LEFT join 更改为 JION 
      

  3.   

    也可将SELECT h.货品代码,SUM(h.[收入数量]) AS 收入数量,SUM(h.[发出数量]) AS 发出数量,SUM(h.[收入成本]) AS 收入成本货款,SUM(h.[发出成本]) AS [发出成本货款]
      FROM [业务单据] h   WHERE  h.[日期]<'2008-08-01'  GROUP BY h.货品代码 放入到临时表中,若数据 量很大的话,不宜在连接时使用。