2016-12-30 144 views
0

你好,我想從我的查詢得到正確的總和,我知道這個工程:SQL 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使這個當時就想通過寫一個存儲過程,使其更快)。

有沒有人看到它爲什麼這樣做?

+0

嘗試在乘法做一個空檢查:'ISNULL(fms1.amount * fms1.rate,0)'。 –

+0

這沒有什麼區別。關係代碼123K01應該返回0,並返回4927.16,我不知道這個數字來自哪裏。 –

+0

然後取出款項,並將所有值,因此可以確保您比較喜歡像..你也應該然後找到在第二個查詢的38.914 :) – BugFinder

回答

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 

謝謝你的所有幫助!

0

這是因爲我們的fms1.amount * fms1.rate。

房價資料,請X.XX,將其轉換爲相同的格式amount

它可以相反。添加更多信息(數據的數據類型和速率的數據類型)以獲得更詳細的答案。

1

我想你的乘法可能會導致問題。因爲我已經嘗試過同樣的問題,一些虛擬的數據,它是給予準確的結果意味着它沒有給予任何空值

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] 

如果上面的查詢結果正確的結果,那麼它的multipilcation問題。

+0

我發現了這個問題。這是因爲我們的數據庫非常大,有時在我眼中難以辨認。這是錯誤的表:) –

0

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

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