【发布时间】:2016-12-30 09:25:49
【问题描述】:
您好,我正在尝试从我的查询中获取正确的 SUM,我知道这可行:
SELECT SUM(AMOUNT) From IncomingInvoiceLine inner Join [File] ON IncomingInvoiceLine.FILENUMBER = [File].FILENUMBER WHERE [File].RELATIONCODE = '12TU01'
但这是没有计算货币的金额,所以我尝试了这个:
SELECT fmsTotalAmountIncoming INTO TempIncomingAmounts FROM (
SELECT SUM(CASE WHEN fms1.currency != 'EUR'
THEN fms1.amount * fms1.rate
ELSE ISNULL(fms1.amount, 0) END ) fmsTotalAmountIncoming
FROM [fms].[dbo].[IncomingInvoiceLine] fms1
WHERE fms1.RELATIONCODE = '12TU01'
) a
SELECT fmsTotalAmountIncoming FROM [fms].[dbo].[TempIncomingAmounts]
DROP TABLE [fms].[dbo].[TempIncomingAmounts]
这并没有返回正确的结果,它在第一个查询返回时返回 NULL:
8145.46
但我无法弄清楚为什么使用正在转换的货币的查询返回 NULL。它应该返回
8106.546
(我首先在 vb.net 中进行了此操作,然后想通过编写存储过程使其更快)。
有人知道为什么会这样吗?
【问题讨论】:
-
尝试对乘法进行空检查:
ISNULL(fms1.amount * fms1.rate, 0)。 -
这没什么区别。关系码 123K01 应该返回 0,返回 4927.16,我不知道这个数字是从哪里来的。
-
然后删除总和,并返回所有值,这样你就可以确定你是在比较同类......你还应该找到一个值 38.914 :)
-
在第二个查询中,您是否故意跳过了 INNER JOIN [FILE]?