2017-08-15 93 views
0

在以下查詢中,分別從[PO數量]和[Recieved_Qty]計算出計算列[總量]和[接收量]。另外,如果我們在輸出記錄(附件)中看到,雖然[採購數量]和[收貨數量]具有完全相同的值,但[總金額]和[接收金額]仍有差異。計算列中的數值差異

select 
    [vendor] 
    ,round(cast([PO Quantity] as float),2)[PO Quantity] 
    ,round([Recieved_Qty],2)[Recieved_Qty] 
    ,[Net Price],round(([PO Quantity]*[Net Price]),2)[Total Amount] 
    ,round(([Recieved_Qty]*[Net Price]),2)[Received Amount] 
    ,round((([PO Quantity]*[Net Price])-(Recieved_Qty*[Net Price])),2)[Balance Amount] 
from [dbo].[Base_file8] 
and [PO Quantity]>[Recieved_Qty] 
and [country] not in ('IN') 

請幫助尋找解決方案。

---------------------------------------------------------------------------- 

Output records: 

    vendor PO Quantity Recieved_Qty Net Price Total Amount Received Amount Balance Amount 
    10025407 452.62 452.62   2105.17  952846.28  952842.04  4.24 
    10025407 295.35 295.35   2105.17  621766.15  621761.97  4.18 
    10025407 503.2 503.2   2105.17  1059325.75  1059321.57  4.18 
    10025407 403.9 403.9   1895.83  765729.54  765725.73  3.82 
    10025407 251.66 251.66   1979.01  498043.58  498037.66  5.92 
+0

我沒有看到問題,你需要什麼幫助?編輯:它是否在計算TOTAL和RECIEVED之間的小數點差異? – Simon

+3

採購訂單數量數據類型float ....不精確可能導致數學錯誤。十進制(16,4)十二進制左邊4到右邊的12位數可能是更好的選擇。 – xQbert

+1

確定查詢沒有'WHERE'子句? – Eli

回答

0

我猜想PO數量和Received_QTY有更多的小數值比你舍入到的2位數字更大,而且這些值是不同的。因此,當您將這些數字乘以不同的十進制值時,您將根據發生舍入時的結果得到不同的便士。您需要確定您是首先將數量四捨五入,還是將數量乘以價格乘以數量。我的猜測是AFTER,因此你不應該對PO數量顯示的值進行四捨五入,也不要接收數量。

添加未包含的值並比較值的差異。

或之前*淨價再輪迴;儘管這是一種糟糕的形式,但當您顯示數據或在向最終用戶顯示成本/價格時存儲舍入值時,您只應該舍入一次。

上欄還糟糕的拼寫收到貨... I E之前除C後...:P

SELECT [vendor] 
    , [PO Quantity] [PO Quantity Unrounded] 
    , [Recieved_Qty] [Recieved_Qty unrounded] 
    , round([PO Quantity],2) [PO Quantity] 
    , round([Recieved_Qty],2) [Recieved_Qty] 
    , [Net Price] 
    , round((round([PO Quantity],2)*[Net Price]),2) [Total Amount] 
    , round((round([Recieved_Qty],2)*[Net Price]),2) [Received Amount] 
    , round((([PO Quantity]*[Net Price])-(Recieved_Qty*[Net Price])),2) [Balance Amount] 
FROM [dbo].[Base_file8] 
and [PO Quantity]>[Recieved_Qty] 
and [country] not in ('IN') 

我可能會做這種方式:

SELECT [vendor] 
    , [PO Quantity] [PO Quantity] 
    , [Recieved_Qty] [Recieved_Qty] 
    , [Net Price] 
    , round([PO Quantity]*[Net Price]),2) [Total Amount] 
    , round([Recieved_Qty]*[Net Price]),2) [Received Amount] 
    , round(([PO Quantity]*[Net Price])-(Recieved_Qty*[Net Price]),2) [Balance Amount] 
FROM [dbo].[Base_file8] 
and [PO Quantity]>[Recieved_Qty] 
and [country] not in ('IN') 

這樣舍入是在數學後完成的,因此我們不會因爲提前舍入而損失$,最終的金額只會舍入一次。所以最多我們輸1分。

系統的創建者在數量上存儲了十個十進制值是有原因的。你應該在數學中使用它們。