【问题标题】:vba - get final product price when more than one discount are appliedvba - 应用多个折扣时获得最终产品价格
【发布时间】:2017-07-03 18:30:47
【问题描述】:

我是新手,对记录集完全没有希望,所以如果您花时间回答我的问题,请提供一些简短的解释,以便我掌握它。

我有 2 张桌子。

1) tblProducts 字段标题:ProductID - Product_Name - Product_Price

2) tblProd_Disc 字段标题:ProductID - 折扣(其中每个产品与超过 1 个折扣相关联)

目标:在每个折扣被连续应用后,得到每个产品的最终价格,例如。如果产品 1 的价格为 100,折扣为 10% 和 15%,则最终价格应为 76.5。

我想我应该把它放在一个使用 ProductID 作为参数的函数中。

谢谢!

【问题讨论】:

    标签: sql ms-access vba


    【解决方案1】:

    这听起来真的应该可以用 SQL 解决。但这并非微不足道 - 基本上您需要对每种产品的所有折扣进行乘法聚合。

    Aggregate multiplicate function 的大力帮助下:

    SELECT p.ProductID, p.Product_Name, p.Product_Price * d.Product_Discount AS Discounted_Price
    FROM tblProducts p 
      LEFT JOIN (
        SELECT ProductID, EXP(SUM(LOG(1-[Discount]))) AS Product_Discount
        FROM tblProd_Disc
        GROUP BY ProductID
    ) d
    ON p.ProductID = d.ProductID
    

    但如果产品根本没有折扣,这将不起作用。
    我尝试了Nz()IIf() 的各种组合以将1 转换为d.Product_Discount,但对于此产品,它总是返回#Error

    作为一种解决方法,您可以使用 UNION 查询,添加未修改价格的产品。

    SELECT p.ProductID, p.Product_Name, p.Product_Price * d.Product_Discount AS Discounted_Price
    FROM tblProducts p 
      INNER JOIN (
        SELECT ProductID, EXP(SUM(LOG(1-[Discount]))) AS Product_Discount
        FROM tblProd_Disc
        GROUP BY ProductID
    ) d
    ON p.ProductID = d.ProductID
    
    UNION
    
    SELECT p.ProductID, p.Product_Name, p.Product_Price 
    FROM tblProducts p 
    WHERE NOT EXISTS (
      SELECT * FROM tblProd_Disc d WHERE d.ProductID = p.ProductID)
    

    我的样本数据:

    +-----------+--------------+---------------+
    | ProductID | Product_Name | Product_Price |
    +-----------+--------------+---------------+
    |         1 | stuff        | 100,00 €      |
    |         2 | no discount  | 100,00 €      |
    |         3 | one          | 100,00 €      |
    +-----------+--------------+---------------+
    
    +--------+-----------+----------+
    | DiscID | ProductID | Discount |
    +--------+-----------+----------+
    |      1 |         1 | 10,00%   |
    |      2 |         1 | 15,00%   |
    |      3 |         3 | 20,00%   |
    +--------+-----------+----------+
    

    结果:

    +-----------+--------------+------------------+
    | ProductID | Product_Name | Discounted_Price |
    +-----------+--------------+------------------+
    |         1 | stuff        |             76,5 |
    |         2 | no discount  |              100 |
    |         3 | one          |               80 |
    +-----------+--------------+------------------+
    

    【讨论】:

    • 哇!我不知道 exp(log... 东西是如何工作的,但它可以工作!!!!!!谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 2020-01-15
    • 1970-01-01
    相关资源
    最近更新 更多