SQL来计算多级折扣

时间:2015-10-23 14:00:27

标签: sql sql-server-2008 tsql

我的架构:

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个以上的折扣。

任何帮助将不胜感激。 感谢。

1 个答案:

答案 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;