繁体   English   中英

从多个表的汇率更新商品价格的sql

[英]sql for product price update from exchange rate from multiple table

我有两个表“ curreny”和“ product_price”。 有些商品是进口的,因此我们需要随着货币汇率的变化保持其价格更新。

“ curreny”表保留各种货币的更新汇率。

“ product_price”表保留字段“ main_price”,“ foreign_price”,“ currency_iso”,“ base_currency”

货币表(每日更新)

c_iso      rate
---------------
USD       3.0257
EUR       3.3547

产品价格表

 id       def     main_price  foreign_price  currency_iso  base_currency
 1     Product1      30.2570       10            USD           1        
 2     Product2      50            14.904        EUR           0      
 3     Product3      67.094        20            EUR           1   

我需要根据base_currency更新所有产品价格。

例如,对于product1,base_currency为1,这表示USD是产品的实际价格。 因此,根据表“ currency”上的新汇率,产品的foeign_price应该乘以USD汇率。

 main_price = foreign_price*rate

对于product2,base_currency为0,这表示main_price是产品的实际价格。 因此,根据表“ currency”上的新汇率,应该用美元汇率来推销产品的价格。

 foreign_price = main_price/rate.

我认为这是您需要的更新:

update product_price p join
       currency c
       on c.c_iso = p.currency_iso
    set main_price = (case when p.base_currency = 1
                           then p.foreign_price * c.rate
                           else p.foreign_price / c.rate
                      end)
    where p.base_currency in (0, 1);

编辑:

根据评论:

update product_price p join
       currency c
       on c.c_iso = p.currency_iso
    set main_price = (case when p.base_currency = 1
                           then p.foreign_price * c.rate
                           else main_price
                      end),
        foreign_price = (case when p.base_currency = 0
                              then p.foreign_price / c.rate
                              else foreign_price
                      end)
    where p.base_currency in (0, 1);

在尝试对if / case语句进行多种设置后,我发现了一个有效的代码:

update product_price as p 
inner join currency as c  on(c.c_iso = p.currency_iso)   
set p.main_price = case p.base_currency when true then
p.foreign_price*c.rate when false then p.main_price
end,
p.foreign_price = case p.base_currency when false then
p.main_price/c.rate when true then p.foreign_price 
end;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM