我是新手,对记录集完全没有希望,所以如果你花时间回答我的问题,请非常好地加入一些简短的解释,这样我就能掌握它。
我有2张桌子。
1) tblProducts ,带字段标题:ProductID - Product_Name - Product_Price
2) tblProd_Disc ,带字段标题:ProductID - 折扣(每个产品与超过1折扣关联)
目标:在连续应用每个折扣后获得每个产品的最终价格,例如。如果产品1的价格为100且折扣为10%和15%,则最终价格应为76.5。
我想我应该把它放在一个使用ProductID作为参数的函数中。
谢谢!
答案 0 :(得分:0)
这听起来像真的应该可以用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 |
+-----------+--------------+------------------+