访问中的完全加入和总和2查询

时间:2012-12-17 11:10:51

标签: sql vb.net ms-access ms-access-2003

我对这种复杂的连接和求和函数非常陌生。 我有2个表查询具有相同的字段(i.e: ProdID, ProdName, NetQty, Unit) 第一个查询包含 OpStock ,第二个包含购买

我想添加这个2表查询以创建一个表,以便我能够看到当前的库存。

第一个表的数据如下:

ProdID ProdName Qty
100 Rose     700
101 Lilly    550
103 Jasmine  600
105 Lavender 400

第二个表的数据如下:

ProdID ProdName Qty
100 Rose     400
101 Lilly    250
104 Lotus   1000
106 MariGold 400

第3个表的最终数据如下:

ProdID ProdName Qty
100 Rose     1100
101 Lilly     800
103 Jasmine   600
104 Lotus    1000
105 Lavender  400
106 MariGold  400

如何使用sql for access2003实现这一目标。 谢谢。

我很抱歉Ciaran, 这纯粹是用于vb.net的访问 这是我的访问查询1

SELECT sp_OpenIandP_Prod.ProdID,
       sp_OpenIandP_Prod.ProdName,
       Sum(([sp_OpenIandP_Prod.SumOfNetQty]-[sp_OpenSales_Prod.SumOfNetQty])) AS NetQty,
       sp_OpenIandP_Prod.UnitSName
FROM sp_OpenIandP_Prod 
     INNER JOIN sp_OpenSales_Prod ON sp_OpenIandP_Prod.ProdID=sp_OpenSales_Prod.ProdID
GROUP BY sp_OpenIandP_Prod.ProdID, 
         sp_OpenIandP_Prod.ProdName, 
         sp_OpenIandP_Prod.UnitSName;

第一个查询结果如下:

ProdID  ProdName    NetQty  UnitSName
1   Rose            0   Kgs
2   Lilly       7125    Mts
3   Lotus       12374   Nos

第二个查询是:

SELECT Products.ProdID, Products.ProdName,
       Sum(OPDDetails.NetQty) AS SumOfNetQty, Units.UnitSName
FROM Units 
     INNER JOIN (Products 
         INNER JOIN (Brands 
             INNER JOIN OPDDetails ON Brands.BrID=OPDDetails.BrandID)
         ON Products.ProdID=Brands.ProdID) 
     ON Units.UnitID=Products.UnitID
WHERE (((OPDDetails.PurID)>0) 
  AND ((OPDDetails.OPDDate)>=[StartDate] And (OPDDetails.OPDDate)<=[EndDate]))
GROUP BY Products.ProdID, Products.ProdName, Units.UnitSName;

,结果集如下:

ProdID  ProdName    SumOfNetQty UnitSName
1   Rose    1800    Kgs
2   Lilly   21000   Mts

我很容易得到上述结果。 但这样做并不容易:

ProdID  ProdName    SumOfNetQty UnitSName
1   Rose    1800    Kgs
2   Lilly   28125   Mts
3       Lotus   12374   Nos

这就是全部。再次感谢。

2 个答案:

答案 0 :(得分:1)

这不是vb.net问题,但您需要使用UNION

Select ProdId, ProdName, Sum(Qty) As QtySum
  From (Select ProdId, ProdName, Qty From TableA
        Union All
        Select ProdId, ProdName, Qty From TableB) DerrivedView
 Group By ProdId, ProdName

答案 1 :(得分:0)

您可以在2个查询之间创建UNION,然后按产品分组:

SELECT ProdID, ProdName, Sum(NetQty) As NetQty, UnitSName
FROM 
( 

    SELECT sp_OpenIandP_Prod.ProdID,
           sp_OpenIandP_Prod.ProdName,
           Sum(([sp_OpenIandP_Prod.SumOfNetQty]-[sp_OpenSales_Prod.SumOfNetQty])) AS NetQty,
           sp_OpenIandP_Prod.UnitSName
    FROM sp_OpenIandP_Prod 
         INNER JOIN sp_OpenSales_Prod ON sp_OpenIandP_Prod.ProdID=sp_OpenSales_Prod.ProdID
    GROUP BY sp_OpenIandP_Prod.ProdID, 
             sp_OpenIandP_Prod.ProdName, 
             sp_OpenIandP_Prod.UnitSName

    UNION ALL

    SELECT Products.ProdID, Products.ProdName,
           Sum(OPDDetails.NetQty) AS NetQty, Units.UnitSName
    FROM Units 
         INNER JOIN (Products 
             INNER JOIN (Brands 
                 INNER JOIN OPDDetails ON Brands.BrID=OPDDetails.BrandID)
             ON Products.ProdID=Brands.ProdID) 
         ON Units.UnitID=Products.UnitID
    WHERE (((OPDDetails.PurID)>0) 
      AND ((OPDDetails.OPDDate)>=[StartDate] And (OPDDetails.OPDDate)<=[EndDate]))
    GROUP BY Products.ProdID, Products.ProdName, Units.UnitSName

)
GROUP BY ProdID, ProdName, UnitSName