2017-08-15 16 views
0

次のクエリでは、計算された列[合計金額]と[受信金額]はそれぞれ[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 
+0

私は質問が表示されません、あなたは何が助けを必要としていますか?編集:TOTALとRECIEVEDの間の計算に小数の違いがあるのでしょうか? – Simon

+3

PO数量データタイプfloat ....不正確さは数学エラーの原因となることがあります。 10進数(16,4)12進数の左から4桁目を小数点以下のほうがよいでしょう。 – xQbert

+1

クエリは 'WHERE'節なしで動作するのでしょうか? – Eli

答えて

0

私はPO量とReceived_QTYはあなたに丸めている2桁以上の小数点以下の値を持っていることと、それらの値が異なっていることを推測すると思います。その結果、これらの数値に異なる小数値を掛け合わせると、丸めが行われているときに基づいて異なるペニーになります。数量を最初に四捨五入するか、価格を乗算した後に数量を丸めるかを決定する必要があります。私の推測はアフターですので、PO数量と数量を表示する値を丸めてはいけません。

丸められていない値を加算し、値の差を比較します。

または*ネットプライスの前にラウンドしてから再びラウンドします。これは悪いフォームですが、エンドユーザーにコスト/価格を示すときにデータを表示したり、丸められた値を保存したりするときは、一度丸めるだけです。列に

も悪いスペリングはCの後を除いてEの前に...私の数量を受け...: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回しか行われないので、早期に丸められるので$を失うことはなく、最終的な金額は一度しか丸められません。ほとんどの場合、私たちは1セントを失うか、または得る。

システムの作成者が10進数のx値を数量に格納した理由があります。数学をするときにそれらをすべて使うべきです。

関連する問題