有两个表
发出表
物料编号、物料名称、发出数
1       DD       123  
1       DD       456
2       CC       789
收回表
物料编号、物料名称、收回数
1       DD       124  
1       DD       454
2       CC       749
本人想查询发出表的按物料编号汇总发出数和收回表的按物料编号汇总收回数以及汇总收回与发出的差如何写呢??
多谢多谢!!

解决方案 »

  1.   

    select
        isnull(a.物料编号,b.物料编号) as 物料编号,
        isnull(a.物料名称,b.物料名称) as 物料名称,
        isnull(a.发出,0) as 发出,
        isnull(b.收回,0) as 收回,
         isnull(a.发出)-isnull(b.收回,0) as 差值
    from
        (select 物料编号,物料名称,sum(发出数) as 发出 from 发出表 group by 物料编号,物料名称) a
    full outer join
        (select 物料编号,物料名称,sum(收回数) as 收回 from 收回表 group by 物料编号,物料名称) b
    on
        a.物料编号=b.物料编号 and a.物料名称=b.物料名称
      

  2.   

    CREATE TABLE 发出表
    (
     物料编号 INT,
     物料名称 VARCHAR(20),
     发出数 INT
    )INSERT INTO 发出表
    SELECT 1,'DD',123  UNION ALL 
    SELECT 1,'DD',456  UNION ALL
    SELECT 2,'CC',789 
    CREATE TABLE 收回表
    (
     物料编号 INT,
     物料名称 VARCHAR(20),
     收回数 INT
    )INSERT INTO 收回表
    SELECT 1,'DD',124  UNION ALL 
    SELECT 1,'DD',454  UNION ALL
    SELECT 2,'CC',749SELECT A.物料编号,A.物料名称,A.发出数, B.收回数, 差额=A.发出数-B.收回数 FROM 
    (
    SELECT 物料编号,物料名称,发出数=SUM(发出数) FROM 发出表 GROUP BY 物料编号,物料名称
    ) A INNER JOIN 
    (
    SELECT 物料编号,物料名称,收回数=SUM(收回数) FROM 收回表 GROUP BY 物料编号,物料名称
    ) B ON A.物料编号 = B.物料编号 AND B.物料名称 = A.物料名称
    DROP TABLE  发出表,收回表
    物料编号        物料名称                 发出数         收回数         差额          
    ----------- -------------------- ----------- ----------- ----------- 
    1           DD                   579         578         1
    2           CC                   789         749         40(所影响的行数为 2 行)
      

  3.   


    a full outer join是有什么功效???