簡體   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