You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中同时实现Vlookup匹配与乘法运算?

用SQL实现发票金额按季度汇率转换为USD

要实现你要的效果,核心是用JOIN关联两张表的币种(对应Excel的VLOOKUP匹配逻辑),然后对每个月的发票金额乘以对应季度的汇率,生成目标列。

假设表结构(可根据实际表名/字段名替换)

  • 汇率表:exchange_rates,字段:Currency(币种代码,如USD、EUR)、Q1_Exchange_Rate(第一季度汇率)、Q2_Exchange_Rate(第二季度汇率)
  • 发票表:invoices,字段:Invoice_ID(发票ID,可选)、Currency(发票币种)、Jan_Amount(1月本地货币金额)、Feb_Amount(2月)、Mar_Amount(3月)、Apr_Amount(4月)、May_Amount(5月)、Jun_Amount(6月)

核心SQL代码

SELECT
    inv.Invoice_ID,
    inv.Currency,
    -- Q1月份(1-3月)用Q1汇率计算USD金额
    inv.Jan_Amount * er.Q1_Exchange_Rate AS Jan_USD,
    inv.Feb_Amount * er.Q1_Exchange_Rate AS Feb_USD,
    inv.Mar_Amount * er.Q1_Exchange_Rate AS Mar_USD,
    -- Q2月份(4-6月)用Q2汇率计算USD金额
    inv.Apr_Amount * er.Q2_Exchange_Rate AS Apr_USD,
    inv.May_Amount * er.Q2_Exchange_Rate AS May_USD,
    inv.Jun_Amount * er.Q2_Exchange_Rate AS Jun_USD,
    -- 可选:保留原本地货币金额列
    inv.Jan_Amount, inv.Feb_Amount, inv.Mar_Amount,
    inv.Apr_Amount, inv.May_Amount, inv.Jun_Amount
FROM
    invoices inv
INNER JOIN
    exchange_rates er ON inv.Currency = er.Currency;

关键说明

  1. JOIN的作用:INNER JOIN ... ON inv.Currency = er.Currency 完全对应Excel中VLOOKUP匹配币种的逻辑,只保留两张表中币种完全匹配的记录。如果需要保留所有发票(哪怕没有对应汇率),把INNER JOIN改成LEFT JOIN即可,此时无匹配汇率的行,计算结果会是NULL。
  2. 字段名带空格的处理:如果你的汇率表字段是Q1 Echange Rate(注意拼写的是Echange,正确为Exchange)这类带空格的名称,需要用引号包裹:
    • SQL Server:er.[Q1 Echange Rate]
    • PostgreSQL/MySQL:er."Q1 Echange Rate"
  3. 无汇率的兜底处理:用LEFT JOIN时,可通过COALESCE函数给无汇率的情况设置默认值(比如用1,即原金额):
    inv.Jan_Amount * COALESCE(er.Q1_Exchange_Rate, 1) AS Jan_USD
    
  4. 币种格式一致性:确保两张表的Currency字段格式统一(比如都是大写USD,或者都是小写usd),避免匹配失败。

内容的提问来源于stack exchange,提问作者Mya_H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 19:22:49