我的架构:
Table: Product
ItemID Price Disc1 Disc2 Disc3
001 1000 1 2 3
002 500 10 0 0
003 500 10 2 8
Table: Sales
ItemID Price Qty Disc1 Disc2 Disc3 SubTotal
001 1000 1 1 2 3 941.09
我想有一个更好的方法来计算这样的多级折扣:
Price Disc1 Disc2 Disc3
1000 1 2 3
500 10 0 0
500 10 2 8
成为:
Price Disc1 Disc2 Disc3 NetPrice
1000 1 2 3 941.09
500 10 0 0 450
500 10 2 8 405.72
此折扣不是所有折扣的总和
对于第1项:
不是价格*(1 + 2 + 3)
但是像这样: ((价格 - (* *(1/100))) - ((价格 - (* *(1/100)))*(2/100))) - (((价格 - (* *) ))) - ((价格 - (价格*(1/100)))*(2/100)))*(3/100))
说明项目0001:
步骤1:1000 - (1/100)//结果:990
步骤2:990 - (2/100)//结果:970.2
步骤2:970.2 - (3/100)//结果:941.09 - >这就是我需要的东西
基本上就像普通商店折扣一样,我可以这样计算:
Select ((Price - (Price*(1/100))) - ((Price - (Price*(1/100))) * (2/100))) - (((Price - (Price*(1/100))) - ((Price - (Price*(1/100))) * (2/100))) * (3/100)) From [MyTable]
还有更好的方法来计算吗?因为我的一些人可以享受4个以上的折扣。
任何帮助将不胜感激。 感谢。
答案 0 :(得分:2)
我认为这更简单:
select Price * (1 - 1.0 / 100) * (1 - 2.0 / 100) * (1 - 3.0 / 100)
就您的数据而言:
select Price * (1 - disc1 / 100) * (1 - disc2 / 100) * (1 - disc3 / 100)
SQL Fiddle似乎无法正常工作,但您可以运行此代码:
我认为这更简单:
select Price * (1 - 1.0 / 100) * (1 - 2.0 / 100) * (1 - 3.0 / 100)
就您的数据而言:
select Price * (1 - disc1 / 100) * (1 - disc2 / 100) * (1 - disc3 / 100)
SQL Fiddle似乎无法正常工作,但您可以运行此代码:
with t as (
select 1 as id, 1000 as price, 1.0 as disc1, 2.0 as disc2, 3.0 as disc3 union all
select 2, 500, 10, 0, 0 union all
select 3, 500, 10, 2, 8
)
select id, price * (1 - disc1/100) * (1 - disc2/100) * (1-disc3/100)
from t;