我有两张桌子,
tblFXRates
Base Quote Rate
USD JPY 1.5
USD GBP 2.5
USD EUR 1.75
EUR JPY 1.5
USD USD 1
tblHoldings
FX FXRate
EUR null
EUR null
USD null
GBP null
JPY null
我想要做的是更新tblHoldings中的FXRate。所以我想选择tblFXRates中基数等于USD的所有费率。然后将此查询的结果加入tblHoldings中的FX列以更新FXRate。它看起来应该如下所示,
结果
FX FXRate
EUR 1.75
EUR 1.75
USD 1
GBP 2.5
JPY 1.5
我不知道如何执行此操作,因为嵌套查询会让我失望。到目前为止我的尝试(非常简洁)在下面,
update h
set h.FXRate = fx.rate
from tblHoldings h
inner join fx
on h.FX = fx.Quote
with fx as
(
select quote, rate
from tblFxRates
where base = 'USD'
)
答案 0 :(得分:1)
试试这个。
update h
set h.FXRate = fx.rate
from tblHoldings h
inner join tblfxrates f on h.FX = f.Quote
where h.base = 'USD'
答案 1 :(得分:1)
我认为这就是你想要的:
update h
set h.FXRate = fx.rate
from tblHoldings h inner join
fx
on h.FX = fx.Quote and fx.base = 'USD';
答案 2 :(得分:1)
您可以使用UPDATE FROM JOIN
:
UPDATE th
SET FXRate = tr.Rate
FROM #tblHoldings th
JOIN #tblFXRates tr
ON th.FX = tr.Quote
WHERE tr.Base = 'USD';
的 LiveDemo
强>
输出:
╔═════╦════════╗
║ FX ║ FXRate ║
╠═════╬════════╣
║ EUR ║ 1.75 ║
║ EUR ║ 1.75 ║
║ GBP ║ 2.5 ║
║ JPY ║ 1.5 ║
║ USD ║ 1 ║
╚═════╩════════╝
或者您可以使用MERGE
声明:
MERGE #tblHoldings AS th
USING #tblFXRates tr
ON th.FX = tr.Quote
WHEN MATCHED AND tr.Base = 'USD' THEN
UPDATE SET FXRate = tr.Rate;
的 LiveDemo2
强>
将检测重复的损坏数据:
INSERT INTO #tblFXRates(Base,Quote,Rate) VALUES ('USD','USD',1);
INSERT INTO #tblFXRates(Base,Quote,Rate) VALUES ('USD','USD',2);
使用UPDATE
静默传递。