查询获取期间的总采购和期末库存
Posted
技术标签:
【中文标题】查询获取期间的总采购和期末库存【英文标题】:Query to get Total Purchases and Closing Stock for Period 【发布时间】:2019-03-11 20:25:02 【问题描述】:我目前的设置:
产品表
UPC(编号) PNAME(文本)采购表
purDate(日期) PNAME(组合框) 数量(数量)收盘
endDate(日期) PNAME(组合框) 数量(数量)我想创建一个查询,列出来自 Products、Total Purchased 和 Closing Quantity 的所有 PNAME
每个月末的数量。在下个月末,上个月的收盘股票将成为当月的开盘股票。
购买发生在整个月内,我们在每个月的最后一天进行收盘。我尝试使用查询向导并从 Products 导入 PNAME
,从 Purchases 导入 Quantity
,从 Closing Stock 导入 Quantity
,但我只得到 Purchases 的总数,而 Closing Stock 的 Total 是空白的。
【问题讨论】:
也许这会有所帮助allenbrowne.com/AppInventory.html 【参考方案1】:首先,简短的忠告:
您的问题非常广泛,因为您已经说明了您想要的,但没有添加任何代码来显示您为实现目标所做的努力 - 这可能会阻止会员为您提供现成的 -提出解决方案,您的问题更有可能被投票结束。
不过,我会扔给你一根骨头,为你指明正确的方向……
查询
假设UPC
字段是Products
表中的主键,您应该使用该字段(与PNAME
字段相对)在Purchases
表中引用您的产品&Closing Stock
表,这样每一项都能被唯一标识。
假设您实施了上述建议,为了产生所需的结果,您需要构建三个单独的查询:
报告月份内的购买量
期初库存
收盘
然后,您可以构建第 4 个查询,以在来自这三个查询的数据旁边显示产品信息。股票查询 (2) 和 (3) 显然都将从 Closing Stock
表中获取数据,但会针对不同月份配置标准。
1。购买
假设您报告的是上个月,购买查询可能类似于:
select
pu.upc, sum(pu.quantity) as puqty
from
purchases pu
where
pu.purdate >= dateserial(year(date),month(date)-1,1) and
pu.purdate < dateserial(year(date),month(date),1)
group by
pu.upc
这里,DateSerial
函数用于计算上个月和当前月份的开始日期,形成购买日期选择标准的日期边界。
2。期初库存
期初库存的查询更加简单,因为不需要汇总,因为一个产品可以在一个月内多次购买,而一个产品永远只有一个任何给定月份的收盘价。
因此,Opening Stock 查询可能类似于:
select
os.upc, os.quantity as osqty
from
[closing stock] os
where
os.enddate >= dateserial(year(date),month(date)-2,1) and
os.enddate < dateserial(year(date),month(date)-1,1)
在这里,日期边界计算为上个月的前一个月(即两个月前),因为一个月的收盘股票将是下一个月的开盘股票。 p>
3。收盘。
鉴于上述情况,现在这应该相对简单 - 只需调整上述查询,使日期边界落在上个月内:
select
cs.upc, cs.quantity as csqty
from
[closing stock] cs
where
cs.enddate >= dateserial(year(date),month(date)-1,1) and
cs.enddate < dateserial(year(date),month(date),1)
把它们放在一起
既然您已经构建了上述三个查询来报告上个月内的购买、开仓和收盘库存,我们现在可以使用一个最终查询将所有三个查询联系在一起。
为此,我们将在上面构造的每个查询中使用Products
表和LEFT JOIN
,因为我们总是希望每个 产品出现在结果中,无论是否产品是在上个月内购买的。
因此,在伪代码中,查询将类似于:
select
p.upc,
p.pname,
purchases.puqty,
openingstock.osqty,
closingstock.csqty
from
(
(
products p left join purchases on p.upc = purchases.upc
)
left join openingstock on p.upc = openingstock.upc
)
left join closingstock on p.upc = closingstock.upc
然后,我们可以在此代码中注入我们之前对每个查询的定义以产生最终结果(希望可以工作,因为我完全没有测试过这些!):
select
p.upc,
p.pname,
purchases.puqty as [Purchased Qty],
openingstock.osqty as [Opening Stock],
closingstock.csqty as [Closing Stock]
from
(
(
products p left join
(
select
pu.upc, sum(pu.quantity) as puqty
from
purchases pu
where
pu.purdate >= dateserial(year(date),month(date)-1,1) and
pu.purdate < dateserial(year(date),month(date),1)
group by
pu.upc
)
purchases on p.upc = purchases.upc
)
left join
(
select
os.upc, os.quantity as osqty
from
[closing stock] os
where
os.enddate >= dateserial(year(date),month(date)-2,1) and
os.enddate < dateserial(year(date),month(date)-1,1)
)
openingstock on p.upc = openingstock.upc
)
left join
(
select
cs.upc, cs.quantity as csqty
from
[closing stock] cs
where
cs.enddate >= dateserial(year(date),month(date)-1,1) and
cs.enddate < dateserial(year(date),month(date),1)
)
closingstock on p.upc = closingstock.upc
【讨论】:
??? 谢谢,工作完美。我还没有掌握子查询的窍门,感谢您的解释,我对它有了更好的理解。 @newbieDBBuilder 非常欢迎您 - 我很高兴该解决方案对您很有效并有助于您理解。如果我的回答充分回答了您的问题,请将答案标记为解决方案(如果您认为合适,请投票),以便其他浏览该网站的人看到该问题已解决。如果您不确定如何执行此操作,请参阅this article。谢谢!以上是关于查询获取期间的总采购和期末库存的主要内容,如果未能解决你的问题,请参考以下文章