计算列中的值差异

时间:2017-08-15 19:50:52

标签: sql sql-server

在以下查询中,计算列[总金额]和[已接收金额]分别从[PO数量]和[已接收数量]计算得出。另外,如果我们在输出记录(附加)中看到,虽然[PO Quantity]和[Recieved_Qty]具有完全相同的值,但[Total Amount]和[Received Amount]仍有差异。

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

1 个答案:

答案 0 :(得分:0)

我猜测PO数量和Received_QTY的十进制值多于您要舍入的2位数,并且这些值不同。因此,当您将这些数字乘以不同的十进制值时,您将根据何时进行舍入而得到不同的便士。您需要确定是否要先将数量四舍五入,或者在乘以价格后舍入数量。我的猜测是,因此您不应该为PO数量显示的值进行舍入,也不应该接收数量。

添加未包含的值并比较值的差异。

或在*净价之前回合然后再回合;虽然这是不好的形式,但是当你向最终用户显示成本/价格时,你应该只显示一次数据或存储舍入值。

在收到数量的列上拼写错误...我在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美分。

系统的创建者在数量上存储x十进制值的原因。在进行数学运算时,你应该全部使用它们。