期初库存、期末库存按日期sql查询
我有两个带有主键和外键的表(MaterialId)期初库存、期末库存按日期sql查询,sql,sql-server,Sql,Sql Server,我有两个带有主键和外键的表(MaterialId) 物料表(多物料) 材料名称打开库存 1笔100 2铅笔50 物料库存(多物料录入) 实际采购数量销售数量日期 1 500 0 2016-12-15 1 0 0 2016-12-16 1 300 0 2016-12-17 1 0
1.如果数据库表出现问题,请指导我如何处理这种情况。
2.还可以从两个表中查找当前日期库存您要查找的是各种数量值的滚动总和。一种方法是使用相关子查询:
SELECT
t1.Date,
mt.MaterialName,
(SELECT OpeningStock FROM [Material Table] WHERE MaterialId = t1.MaterialId) +
COALESCE((SELECT SUM(t2.PurchaseQty - t2.SalesQty) FROM [Material Stock] t2
WHERE t2.Date < t1.Date AND t1.MaterialId = t2.MaterialId), 0) AS OpeningStock,
t1.PurchaseQty,
t1.SalesQty,
(SELECT OpeningStock FROM [Material Table] WHERE MaterialId = t1.MaterialId) +
COALESCE((SELECT SUM(t2.PurchaseQty - t2.SalesQty) FROM [Material Stock] t2
WHERE t2.Date <= t1.Date AND t1.MaterialId = t2.MaterialId), 0) AS ClosingStock
FROM [Material Stock] t1
INNER JOIN [Material Table] mt
ON t1.MaterialId = mt.MaterialId
ORDER BY
mt.MaterialName,
t1.Date;
选择
t1.日期,
mt.MaterialName,
(从[Material Table]中选择OpeningStock,其中MaterialId=t1.MaterialId)+
合并((从[物料库存]t2中选择总和(t2.采购数量-t2.销售数量)
其中t2.Date
SELECT S.DATE, M.MaterialName, M.OpeningStock, S.PurchaseQty, S.SalesQty, SUM((M.OpeningStock+S.PurchaseQty)-S.SalesQty)ClosingStock FROM #TABLE
(
SELECT * FROM MaterialTABLE
) M
INNER JOIN Material S ON S.MaterialId = M.MaterialId where s.date between @FromDate and @Todate
到目前为止,您是否尝试过任何方法来解决问题?@KETULSONI请向我们展示您的查询,您在哪里尝试过某种方法?1.递归CTE以生成日期列表2.为什么您认为有问题?谢谢,但是“铅笔”呢期初库存为50个数量。您从未提供任何铅笔数据,因此没有显示任何内容。您在上面看到的记录基于材料库存表。添加一些铅笔数据,您将获得输出。好的,但是如果一些日期数据不可用,那么请检查-@KETULSONI您当前的设计不好,您不应该存储initial库存在单独的表格中。相反,只需在库存表格中插入一条记录,记录每种材料的初始库存。您明白吗?
SELECT
t1.Date,
mt.MaterialName,
(SELECT OpeningStock FROM [Material Table] WHERE MaterialId = t1.MaterialId) +
COALESCE((SELECT SUM(t2.PurchaseQty - t2.SalesQty) FROM [Material Stock] t2
WHERE t2.Date < t1.Date AND t1.MaterialId = t2.MaterialId), 0) AS OpeningStock,
t1.PurchaseQty,
t1.SalesQty,
(SELECT OpeningStock FROM [Material Table] WHERE MaterialId = t1.MaterialId) +
COALESCE((SELECT SUM(t2.PurchaseQty - t2.SalesQty) FROM [Material Stock] t2
WHERE t2.Date <= t1.Date AND t1.MaterialId = t2.MaterialId), 0) AS ClosingStock
FROM [Material Stock] t1
INNER JOIN [Material Table] mt
ON t1.MaterialId = mt.MaterialId
ORDER BY
mt.MaterialName,
t1.Date;
SELECT S.DATE, M.MaterialName, M.OpeningStock, S.PurchaseQty, S.SalesQty, SUM((M.OpeningStock+S.PurchaseQty)-S.SalesQty)ClosingStock FROM #TABLE
(
SELECT * FROM MaterialTABLE
) M
INNER JOIN Material S ON S.MaterialId = M.MaterialId where s.date between @FromDate and @Todate