如何根据附加标准计算列中的价格?

时间:2014-10-21 18:59:27

标签: tsql stored-procedures business-logic stored-functions

如何根据标准计算表的最终价格?标准将在表修饰符中设置。我在考虑左连接,但是在存储过程中是否可以选择修饰符的类型?每个记录只有一个标准,不能合并。

项目:

code   |   price_general
---------------------------------
BIKE   |   50
CAR    |   300
BOAT   |   600
PLANE  |   1200

改性剂:

type   |   item        |  amount
----------------------------------
PERC   |   CAR         |  20   (add 20% on top)
FIXE   |   BOAT        |  700  (fixed price 700)
ADD    |   PLANE       |  10   (add +10 value)

结果应该如下所示

code   |   price_general    |    price_final
-------------------------------------------------
BIKE   |   50               |    50
CAR    |   300              |    360
BOAT   |   600              |    700
PLANE  |   1200             |    1210

这在TSQL中是否可行?或者我应该为C#代码添加额外的业务逻辑吗?

感谢您的想法。

3 个答案:

答案 0 :(得分:1)

你可以使用CASE statement和你的逻辑。类似的东西:

SELECT i.code, i.price_general,
price_final = 
CASE m.type  
WHEN 'PERC' THEN i.price_general*(1 + m.amount/100)
WHEN 'FIXE' THEN m.amount
WHEN 'ADD' THEN i.price_general + m.amount
ELSE i.price_general
END
FROM items i LEFT JOIN modifier m on i.item = m.code;

对于任何拼写错误或语法错误道歉,我使用Postgresql,但我希望你明白这个想法......

答案 1 :(得分:0)

将amt分成几个并固定 如果你想要所有固定的话,只需加0即可 如果你想要全部,则固定为0

select items.code
     , items.price_general 
     , isnull(modifier.item, items.price_general, items.price_general * modifier.up + modifier.fixed) as [price_final]
  from items 
  left join modifier 
    on modifier.item = items.code

答案 2 :(得分:0)

试试这个

SELECT I.CODE,
       I.PRICE_GENERAL,
       CASE
         WHEN M.TYPE LIKE 'ADD%[%]%' THEN I.PRICE_GENERAL * ( 1 + M.AMOUNT / 100 )
         WHEN M.TYPE LIKE 'FIXED%' THEN M.AMOUNT
         WHEN M.TYPE LIKE 'ADD%'
              AND M.TYPE NOT LIKE 'ADD%[%]%' THEN I.PRICE_GENERAL + M.AMOUNT
         ELSE I.PRICE_GENERAL
       END
FROM   ITEMS I
       LEFT OUTER JOIN MODIFIER M
                    ON I.ITEM = M.CODE