2017-08-15 65 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分。

系统的创建者在数量上存储了十个十进制值是有原因的。你应该在数学中使用它们。