无同币种汇率数据时,交易表币种转换为USD的SQL查询修正咨询
没问题,我来帮你搞定这个汇率转换的问题~
你的核心问题在于:当交易币种本身就是USD时,ExchangeRate表里没有对应的USD→USD汇率记录,左连接后Exchange_Rate会变成NULL,相乘后结果自然也不对。解决思路很简单:给同币种的情况默认一个汇率1(因为本币转本币不需要换算)。
这里有两种简洁的实现方式:
方法1:用COALESCE处理NULL值
COALESCE函数会返回传入参数里第一个非NULL的值,刚好可以用来替换缺失的同币种汇率:
SELECT Currency, Local_Price, Local_Price * COALESCE(ER.Exchange_Rate, 1) AS In_USD FROM Transaction T LEFT JOIN ExchangeRate ER ON T.Currency = ER.From_Currency AND ER.To_Currency = 'USD'
方法2:用CASE WHEN显式判断
如果觉得COALESCE不够直观,也可以用CASE语句明确处理两种情况:
SELECT Currency, Local_Price, CASE WHEN ER.Exchange_Rate IS NOT NULL THEN Local_Price * ER.Exchange_Rate ELSE Local_Price -- 等同于 Local_Price * 1 END AS In_USD FROM Transaction T LEFT JOIN ExchangeRate ER ON T.Currency = ER.From_Currency AND ER.To_Currency = 'USD'
这两种写法都能得到你想要的预期结果:USD的记录会直接保留原金额,其他币种则用对应的汇率换算成USD。
内容的提问来源于stack exchange,提问作者user2293950
相关产品推荐
相关产品推荐

