有3个表:分别是:【采购单】、【零售单】、【损益单】
表的字段都一样:
=====================
货号        数量
=====================【说明】:以 货号 分类合计出3张表的数量合计,并用购进-销售得到库存;SELECT 采购单.货号,采购单.数量 as 购进,零售单.数量 as 销售,损益单.数量 as 损益,采购单.数量-零售单.数量 as 库存 FROM 采购单 left join 
(SELECT 零售单.货号,SUM(零售单.数量) As 数量 FROM 零售单  GROUP BY 零售单.货号) AS 零售单 
ON 采购单.货号=零售单.货号
left join
SELECT 损益单.货号,SUM(损益单.数量) As 数量 FROM 损益单  GROUP BY 损益单.货号) AS 损益单 ON 采购单.货号=损益单.货号要通过SQL语句得到如下表:
==================================================================
货号    采购数量合计     销售数量合计     损益数量合计       库存
==================================================================
【问题】:这条SQL语句中有错误,两个表之间用left join连接没问题,但一加上第三个表就报错! 请高手帮忙指点!谢谢!

解决方案 »

  1.   

    SELECT 采购单.货号,采购单.数量 as 购进,零售单.数量 as 销售,损益单.数量 as 损益,采购单.数量-零售单.数量 as 库存 
    FROM 采购单 
    LEFT JOIN
    (SELECT 零售单.货号,SUM(零售单.数量) As 数量 FROM 零售单  GROUP BY 零售单.货号) AS 零售单 
    ON 采购单.货号=零售单.货号 
    LEFT JOIN
    (SELECT 损益单.货号,SUM(损益单.数量) As 数量 FROM 损益单  GROUP BY 损益单.货号) AS 损益单 
    ON 采购单.货号=损益单.货号 
      

  2.   

    select  采购单.货号,采购单.数量 as 购进,零售单.数量 as 销售,损益单.数量 as 损益,采购单.数量   零售单.数量 as 库存 FROM 采购单, 零售单 ,损益单 where  采购单.货号=零售单.货号  and 采购单.货号=损益单.货号 你在创建表的时候最好不要使用汉字很很麻烦的
    我上面的你可以试一试
    我可以将一下我的思路
    你将你要查询的字段放在from之前,
    在where 条件之后加上你前面查询的内容所在的所以的表中。如果我的语句有问题的话
    你在想一下其他的办法吧
      

  3.   


    SELECT 采购单.货号,采购单.数量 as 购进,零售单.数量 as 销售,损益单.数量 as 损益,采购单.数量-零售单.数量 as 库存 
    FROM 采购单 ,
    (SELECT 零售单.货号,SUM(零售单.数量) As 数量 FROM 零售单  GROUP BY 零售单.货号)as 零售单 ,
    (SELECT 损益单.货号,SUM(损益单.数量) As 数量 FROM 损益单  GROUP BY 损益单.货号) AS 损益单 
    where 采购单.货号(*)=零售单.货号 and 采购单.货号(*)=损益单.货号 
      

  4.   

    损益不影响库存??
     
    select 货号,sum(采购数量合计) as 采购数量合计,sum(销售数量合计) as 销售数量合计,sum(损益数量合计) as 损益数量合计,sum(库存) as 库存
    from ( 
    select 货号,数量 as 采购数量合计,cast(0 as int) as 销售数量合计,cast(0 as int) as 损益数量合计,数量 as 库存 
    from 采购单
    union all
    select 货号,0 as 采购数量合计,数量 as 销售数量合计,cast(0 as int) as 损益数量合计,-数量 as 库存 
    from 零售单
    union all
    select 货号,0 as 采购数量合计,0 as 销售数量合计,数量 as 损益数量合计,0 as 库存 
    from 损益单
    ) as t
    group by 货号
      

  5.   

    这样的统计问题用left join连接可能造成数据丢失,也可能造成数据重复计算,用union all最安全
      

  6.   

    select a.hx,sum(a.cgsl) 采购数量,sum(a.xssl) 销售数量,sum(a.sysl) 损益数量,sum(a.cgsl)-sum(a.xssl) 库存数量 from
    (select hx,sl as cgsl,0 xssl,0 sysl from cgd
    union all
    select hx,0 as cgsl,sl as xssl,0 sysl from xhd
    union all 
    select hx,0 as cgsl,0 as xssl,sl as sysl  from syd) a
    group by a.hx
      

  7.   

    cgd --采购单
    xhd --销售单
    syd  --损益单hx                                                 采购数量        销售数量        损益数量        库存数量        
    -------------------------------------------------- ----------- ----------- ----------- ----------- 
    001                                                10          2           5           8
    002                                                5           1           0           4
    003                                                5           0           5           5(所影响的行数为 3 行)