T-SQL SUM()与行级计算?

时间:2014-11-20 20:56:11

标签: sql sql-server tsql

我们正在实施货币公约。我们的一些客户在许多国家/地区开展业务,部分订单以公司的基础货币存放,不需要转换,部分订单位于其他国家/地区,需要转换。我们在订单表中有一个currency_rate,如果汇率为NULL,则不需要转换,如果有汇率,我们将订单总数乘以转换汇率。我的问题是 - 我不认为INSULL()会做到这一点。

SELECT Sum(ISNULL(order_total,0) * ISNULL(currency_rate,1)) AS [Total] 
FROM   orders

order_total始终作为公司的基础货币存储在数据库中,并且仅在需要时进行转换以用于显示目的。这里的一些工程师担心这可能在聚合而不是行级上起作用。

1 个答案:

答案 0 :(得分:0)

但它适用于两个级别

这适用于行级:

ISNULL(order_total,0) * ISNULL(currency_rate,1)

Sum只是行级

的总和

要证明行级别运行以下内容:

SELECT (ISNULL(order_total,0) * ISNULL(currency_rate,1)) AS [RowTotal] 
FROM   orders