Tsql 如何根据附加标准计算列中的价格?
如何根据标准计算表项目中的最终价格?标准将在表修改器中设置。我在考虑左连接,但在存储过程中是否可以选择修饰符的类型?每个记录只有一个标准,不能合并 项目:Tsql 如何根据附加标准计算列中的价格?,tsql,stored-procedures,business-logic,stored-functions,Tsql,Stored Procedures,Business Logic,Stored Functions,如何根据标准计算表项目中的最终价格?标准将在表修改器中设置。我在考虑左连接,但在存储过程中是否可以选择修饰符的类型?每个记录只有一个标准,不能合并 项目: code | price_general --------------------------------- BIKE | 50 CAR | 300 BOAT | 600 PLANE | 1200 type | item | amount -------------------
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
---------------------------------
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代码中添加额外的业务逻辑
谢谢你的想法。你可以用a来表达你的逻辑。比如:
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,但我希望您能理解…将amt拆分为up并修复
如果您希望所有问题都得到解决,只需向上输入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
试试这个
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
工作良好(对TSQL进行轻微修改后)。谢谢