查询以获取期间的总采购量和期末库存
Query to get Total Purchases and Closing Stock for Period
我当前的设置:
产品Table
- UPC(数量)
- PNAME(文本)
购买量Table
- purDate(日期)
- PNAME(组合框)
- 数量(数量)
收盘价
- 结束日期(日期)
- PNAME(组合框)
- 数量(数量)
我想创建一个查询,列出每个月末的所有 PNAME
产品、总采购量和结束数量。次月末,上月收盘价为当月开盘价。
采购发生在整个月,我们在每个月的最后一天获取期末库存。我尝试使用查询向导并从产品中导入 PNAME
,从采购中导入 Quantity
,从期末库存中导入 Quantity
,但我只得到采购总额和期末库存总额是空白的。
首先提个小建议:
您的问题非常广泛,因为您已经陈述了您 想要的东西 但没有提出任何代码来显示您为实现目标所做的努力 - 这可能会阻止成员为您提供现成的解决方案,您的问题更有可能被投票关闭。
尽管如此,我还是会扔给你一根骨头,为你指明正确的方向......
查询
假设 UPC
字段是您 Products
table 中的主键,您应该使用此字段(相对于 PNAME
字段)在 Purchases
table 和 Closing Stock
table 中引用您的产品,以便可以唯一标识每个项目。
假设您实施了上述建议,为了产生所需的结果,您需要构造三个单独的查询:
报告月份内的购买
开盘价
收盘价
然后您可以构建第 4th 个查询来显示产品信息以及来自这三个查询的数据。股票查询 (2) 和 (3) 显然都会从 Closing Stock
table 中获取数据,但是为不同的月份配置了标准。
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。期初库存
期初库存的查询更加简单,因为不需要聚合,因为一个产品可以在一个月内多次购买,而一个产品只会有任何给定月份的单一收盘库存数据。
因此,期初库存查询可能类似于:
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)
此处,日期边界计算为上个月上个月(即两个月前),因为一个月的收盘库存将是下一个。
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
table 和 LEFT JOIN
,因为我们总是希望 every 产品出现在结果中,无论该产品是否在上个月内购买过。
因此,在伪代码中,查询将类似于:
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
然后我们可以在此代码中注入我们之前对每个查询的定义以产生最终结果(希望它能工作,因为我已经完全测试了这个 none!):
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
我当前的设置:
产品Table
- UPC(数量)
- PNAME(文本)
购买量Table
- purDate(日期)
- PNAME(组合框)
- 数量(数量)
收盘价
- 结束日期(日期)
- PNAME(组合框)
- 数量(数量)
我想创建一个查询,列出每个月末的所有 PNAME
产品、总采购量和结束数量。次月末,上月收盘价为当月开盘价。
采购发生在整个月,我们在每个月的最后一天获取期末库存。我尝试使用查询向导并从产品中导入 PNAME
,从采购中导入 Quantity
,从期末库存中导入 Quantity
,但我只得到采购总额和期末库存总额是空白的。
首先提个小建议:
您的问题非常广泛,因为您已经陈述了您 想要的东西 但没有提出任何代码来显示您为实现目标所做的努力 - 这可能会阻止成员为您提供现成的解决方案,您的问题更有可能被投票关闭。
尽管如此,我还是会扔给你一根骨头,为你指明正确的方向......
查询
假设
UPC
字段是您Products
table 中的主键,您应该使用此字段(相对于PNAME
字段)在Purchases
table 和Closing Stock
table 中引用您的产品,以便可以唯一标识每个项目。假设您实施了上述建议,为了产生所需的结果,您需要构造三个单独的查询:
报告月份内的购买
开盘价
收盘价
然后您可以构建第 4th 个查询来显示产品信息以及来自这三个查询的数据。股票查询 (2) 和 (3) 显然都会从 Closing Stock
table 中获取数据,但是为不同的月份配置了标准。
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。期初库存
期初库存的查询更加简单,因为不需要聚合,因为一个产品可以在一个月内多次购买,而一个产品只会有任何给定月份的单一收盘库存数据。
因此,期初库存查询可能类似于:
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)
此处,日期边界计算为上个月上个月(即两个月前),因为一个月的收盘库存将是下一个。
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
table 和 LEFT JOIN
,因为我们总是希望 every 产品出现在结果中,无论该产品是否在上个月内购买过。
因此,在伪代码中,查询将类似于:
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
然后我们可以在此代码中注入我们之前对每个查询的定义以产生最终结果(希望它能工作,因为我已经完全测试了这个 none!):
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