您可以轻松编写多个用分号“;”分隔的 SQL 语句
示例:
INSERT INTO PurchaseDetail (BatchNumber, ProductID, Quantity) VALUES (@BatchNumber, @ProductID, @Quantity);
INSERT INTO StockDetail (ProductID, ProductName, OpeningStock, ClosingStock, PurchaseQty, DispenseQty, PurchaseReturn,DispenseReturn) SELECT ProductID, ProductName, ClosingStock, ClosingStock + @Quantity, @Quantity, 0, 0, 0 FROM StockDetail WHERE ProductID = @ProductID AND ID = (SELECT TOP 1 ID FROM StockDetail WHERE ProductID = @ProductID ORDER BY ID)
而且您真的不应该在每个表中重新存储产品名称。相反,您应该存储 ProductID。您的 SalesDetails 没有说明销售的是哪种产品。
以下是更规范化的建议架构:
产品(ID、产品名称、库存)
PurchaseDetail (ID, BatchID, ProductID, Quantity, ...)
SalesDetail(ID、BillID、ProductID、数量...)
购买批次(ID、购买日期)
SalesBill(ID、SalesDate、CustomerID)
如果您需要知道特定时间段的开、关、购买和分发,您可以随时运行 SQL:
当前库存:
SELECT Stock FROM Product WHERE ID = @ProductID
从@StartDate 到@EndDate 购买:
SELECT SUM(Quantity) FROM PurchaseDetail INNER JOIN PurchaseBatch ON PurchaseDetail.BatchID = PurchaseBatch.ID WHERE PurchaseBatch.PurchaseDate >= @StartDate AND PurchaseBatch.PurchaseDate < @EndDate AND PurchaseDetail.ProductID = @ProductID
从@StartDate 到@EndDate 销售:
SELECT SUM(Quantity) FROM SalesDetail INNER JOIN SalesBill ON SalesDetail.BillID = SalesBill.ID WHERE SalesBill.SalesDate >= @StartDate AND SalesBill.SalesDate < @EndDate AND SalesDetail.ProductID = @ProductID
从@EndDate 购买到现在:
SELECT SUM(Quantity) FROM PurchaseDetail INNER JOIN PurchaseBatch ON PurchaseDetail.BatchID = PurchaseBatch.ID WHERE PurchaseBatch.PurchaseDate >= @EndDate AND PurchaseDetail.ProductID = @ProductID
从@EndDate 销售到现在:
SELECT SUM(Quantity) FROM SalesDetail INNER JOIN SalesBill ON SalesDetail.BillID = SalesBill.ID WHERE SalesBill.SalesDate > @EndDate AND SalesDetail.ProductID = @ProductID
因此,
从@StartDate 到@EndDate =
当前库存
- 从@StartDate 购买到@EndDate
- 从@EndDate 购买到现在
+ 从@StartDate 到@EndDate 的销售额
+ 从@EndDate 到现在的销售额
从@StartDate 到@EndDate =
当前库存
- 从@EndDate 购买到现在
+ 从@EndDate 到现在的销售额
你还有
从@StartDate 到@EndDate 的销售额
从@StartDate 到@EndDate 购买