2013-02-05 4 views
2

당 할인에 대한 SQL보기에 잘못된 계산을 수신하고 나는 나는이 개 테이블 붙어 가지고 있어요 InvNum, 총, 할인, Nettotal 등 ...내가 ITEM

SalesDetails : InvNum, ItemCode, Amount 등.

질문과 답변입니다. 항목별로 주어진 할인을 계산하고 싶습니다. 코드를 사용하여 뷰에서했습니다.

SELECT dbo.Sales.InvNum, 
     dbo.SalesDetails.Amount 
      /dbo.Sales.Total*dbo.Sales.Discount AS DiscountPerItem 
FROM dbo.Sales 
    INNER JOIN dbo.SalesDetails ON dbo.Sales.InvNum = dbo.SalesDetails.InvNum 

정확하게 작동하지만 정확한 결과를 제공하지 않는 것이 문제입니다. 예 :

Sales.Total = 33,355,7.7500 
Sales.Discount = 2,948.7500 

SalesDetails.ItemCode = 1 
SalesDetails.DiscountPerItem = 1.4744 (wrong result by SQL) 

기타 (항목 2, 3, 4, .....) DiscountPerItem가 될 가진다고 (198/33,355,7.7500 * 2,948.7500) = 1.75 = 1.4744하지 무엇 이 코드에서의 실수입니다. 미리 감사

답변

0

시도 I는 문제 진수 계산 발견

SELECT dbo.Sales.InvNum, 
     (dbo.SalesDetails.Amount*dbo.Sales.Discount)/dbo.Sales.Total 
      AS DiscountPerItem 
FROM dbo.Sales 
    INNER JOIN dbo.SalesDetails ON dbo.Sales.InvNum = dbo.SalesDetails.InvNum 
+0

라운딩 에러를 감소시키는 제 곱셈 : ROUND (CAST (dbo.SalesDetails.Total 진수 (32, 4))/CAST (NULLIF (dbo.Sales.Total, 0) AS 10 진수 (32, 4)) * CAST (dbo.Sales.DiscountMoney AS 10 진수 (32, 4)), 2) –