查询获取期间的总采购和期末库存

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。谢谢!

以上是关于查询获取期间的总采购和期末库存的主要内容,如果未能解决你的问题,请参考以下文章

微信统一下单需注意问题

第八篇商城系统-库存管理

第八篇商城系统-库存管理

ERP模块

库存,供应链,采购管理和计算机科学-一般,高级问题[关闭]

详解EBS接口开发之库存事务处理采购接收和退货