如何在VB.NET中的MS ACCESS数据库中创建SQL项目历史库存卡

问题描述 投票:0回答:1

我正在尝试使用 VB.NET 中的 MS Access 数据库创建 SQL 项目历史库存卡。我有下面的 SQL,但它还不正确:

SELECT CodeProduct, Sum(IIf(Cat="IN", Qty, 0)) AS [IN], Sum(IIf(Cat="Out", Qty, 0)) AS OUT, Sum(Qty * IIf(Cat="OUT", -1, 1)) AS BALANCE
FROM (
    SELECT [No], Invono, CodeProduct,Qty, "IN" AS Cat FROM PurchaseDetail
    UNION 
    SELECT [No], Invono, CodeProduct, Qty, "OUT" FROM SalesDetail
)  AS DetailUNION
WHERE CodeProduct = 'A'
GROUP BY CodeProduct;

上述 SQL 代码的结果

代码产品 平衡
A 75 65 10

样本数据:

桌子

Purchase

因沃诺 参与 交易 备注 姓名SC
1000 23 年 10 月 18 日 购买 再次重复 测试1
1001 23 年 10 月 19 日 购买 测试2

桌子

PurchaseDetail

因沃诺 没有 代码产品 数量 信息
1000 1 A 50 白色
1000 2 B 35
1001 1 C 17
1001 2 A 25 棕色

桌子

Sales

因沃诺 参与 交易 备注 姓名SC
1000 23 年 10 月 18 日 销售 测试10
1000 23 年 10 月 19 日 销售 测试20
1000 23 年 10 月 20 日 销售 测试30

桌子

SalesDetail

因沃诺 没有 代码产品 数量 信息
1000 1 A 25 白色
1001 1 C 35
1001 2 A 15 白色
1002 1 A 25 棕色

想要的结果

因沃诺 参与 交易 没有 代码产品 数量 信息 备注 姓名SC 平衡
1000 23 年 10 月 18 日 购买 1 A 50 白色 再次重复 测试1 50 50
1000 23 年 10 月 18 日 销售 1 A 25 白色 测试10 25 25
1000 23 年 10 月 19 日 购买 2 A 25 棕色 测试2 25 50
1000 23 年 10 月 19 日 销售 2 A 15 白色 测试20 15 35
1000 23 年 10 月 20 日 销售 1 A 25 棕色 测试30 25 10
...
sql ms-access join inner-join union
1个回答
0
投票

使用 INNER JOIN 将销售和采购表包含在 UNION 行中:

SELECT InvoDate, Cat, InvoNo, CodeProduct, NameSC, Sum(IIf(Cat="IN", Qty, 0)) AS [IN], Sum(IIf(Cat="Out", Qty, 0)) AS OUT, Sum(Qty * IIf(Cat="OUT", -1, 1)) AS BALANCE
FROM (
    SELECT [No], InvoDate, Purchase.Invono, CodeProduct, Qty, NameSC, "IN" AS Cat FROM PurchaseDetail INNER JOIN Purchase ON Purchase.Invono = PurchaseDetail.Invono
    UNION 
    SELECT [No], InvoDate, Sales.Invono, CodeProduct, Qty, NameSC, "OUT" FROM SalesDetail INNER JOIN Sales ON Sales.Invono = SalesDetail.Invono
)  AS DetailUNION
WHERE CodeProduct = 'A'
GROUP BY InvoDate, Cat, InvoNo, CodeProduct, NameSC;
InvoDate InvoNo 代码产品 姓名SC 平衡
2023年10月18日 1000 A 测试1 50 0 50
2023年10月18日 1000 A 测试10 0 25 -25
2023年10月19日 1001 A 测试2 25 0 25
2023年10月19日 1000 A 测试20 0 25 -25
2023年10月20日 1000 A 测试30 0 25 -25
© www.soinside.com 2019 - 2024. All rights reserved.