繁体   English   中英

SQL SUM返回错误的结果

[英]SQL SUM Returns wrong result

您好,我正在尝试从查询中获取正确的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中做到了这一点,然后想通过编写存储过程使其更快)。

有人知道为什么这样做吗?

我认为您的乘法可能会导致问题。 因为我已经用一些虚拟数据尝试了相同的问题,并且给出了准确的结果,这意味着它没有给出任何空值

 SELECT fmsTotalAmountIncoming INTO TempIncomingAmounts FROM (
    SELECT SUM(CASE WHEN fms1.currency != 'EUR'
        THEN fms1.amount * 0.5
    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]

如果以上查询得出正确的结果,则说明它是多重问题。

这是因为我们的fms1.amount * fms1.rate。

Rate为X.XX格式,将其转换为与amount相同的格式。

相反。 添加更多信息(金额的数据类型和费率的数据类型)以获得更详细的答案。

可能是乘法中的空值之一。 您可以找出以下方式

ISNULL(fms1.amount * fms1.rate,0)

最后的问题是我的愚蠢,我试图直接从IncomingInvoiceLine获取它,而我需要对文件进行内部联接。 现在可以使用以下方法工作:

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].[file] f
    INNER JOIN [fms].[dbo].[incominginvoiceline] fms1 ON 
    fms1.filenumber = CONVERT(NVARCHAR, f.filenumber)
    WHERE f.RELATIONCODE = @RelationCode
) a 

感谢您的所有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM