我们正在实施货币公约。我们的一些客户在许多国家/地区开展业务,部分订单以公司的基础货币存放,不需要转换,部分订单位于其他国家/地区,需要转换。我们在订单表中有一个currency_rate,如果汇率为NULL,则不需要转换,如果有汇率,我们将订单总数乘以转换汇率。我的问题是 - 我不认为INSULL()会做到这一点。
SELECT Sum(ISNULL(order_total,0) * ISNULL(currency_rate,1)) AS [Total]
FROM orders
order_total始终作为公司的基础货币存储在数据库中,并且仅在需要时进行转换以用于显示目的。这里的一些工程师担心这可能在聚合而不是行级上起作用。
答案 0 :(得分:0)
但它适用于两个级别
这适用于行级:
ISNULL(order_total,0) * ISNULL(currency_rate,1)
Sum只是行级
的总和要证明行级别运行以下内容:
SELECT (ISNULL(order_total,0) * ISNULL(currency_rate,1)) AS [RowTotal]
FROM orders