2014-07-08 6 views
0

주문한 마지막 줄을 제거하면 다음 SQL 쿼리가 작동합니다. 누구든지이 쿼리를 통해 주문할 때 이것이 작동하지 않는 이유를 말해 줄 수 있습니까?주문을 사용할 때 "0으로 나누기 오류가 발생했습니다."

declare @UQ as decimal(20,6); 
declare @MUQ as decimal(20,6); 

select @UQ=ItemUnit_UnitQuantity, @MUQ=ItemUnit_MainUnitQuantity from tItemUnit 
where ItemUnit_Id = 23996 
select top 1 (InvBuyPriceValue/InvL_Quantity)*iu.ItemUnit_UnitQuantity/iu.ItemUnit_MainUnitQuantity*@MUQ/@UQ as InvBuyPrice, Discount 
from tInvL l 
left outer join tInvH h on h.InvH_Id = l.InvH_Id 
left outer join tItem i on i.Item_Id = l.Item_Id 
left outer join tItemUnit iu on iu.ItemUnit_Id = l.ItemUnit_Id 
left outer join tUnit u on u.Unit_Id = iu.Unit_Id 
left outer join tClientObj clo on clo.ClientObj_Id = h.ClientObj_Id 
left outer join tDocType dt on dt.DocType_Id = h.DocType_Id 
where h.CompanyObj_Id = (select CompanyObj_Id from tEnabledCompany where CompanyClientObj_Id=(select ClientObj_Id from tClientObj where ClientObj_Code = '504')) 
and dt.DocType_InOut = 1 
and l.Item_Id = 19558 
and h.ClientObj_Id = 386 
order by InvH_DocDate desc, InvH_DocTime desc 

내가 말하는 오류를 얻을 : 나누기에 의한 제로 오류가 발생했습니다. 내가가 아니라 select 문에서, 예를 들어 순서에이 오류가 왜 이해가 안

... 당신이 분열을 수행하는 유일한 장소

+0

(InvBuyPriceValue/InvL_Quantity)이 값을 by order로 나누기 전에이 값을 확인하십시오. 무슨 일이 일어나는지 보셔야합니다. –

+6

by order가 없기 때문에 결과 집합에 대해 계산 된 첫 번째 행을 취할 수 있으며 우연히 그 행에 0이 아닌'InvL_Quantity'와'iu.ItemUnit_MainUnitQuantity' 값이 들어있을 것입니다. 그러나 'ORDER BY'를 추가하면 더 많은 행을 생성해야하며 그 중 하나 이상에 위의 값 중 하나 또는 둘 모두에 대해 0 값이 포함됩니다. –

답변

1

그래서 아마 InvL_Quantity 또는 iu.ItemUnit_MainUnitQuantity가 제로가

select top 1 (InvBuyPriceValue/InvL_Quantity)*iu.ItemUnit_UnitQuantity/iu.ItemUnit_MainUnitQuantity*@MUQ/@UQ 

의 구분이 있습니다.

ORDER BY없이 SQL Server 오류가 표시되는 이유는 무엇입니까? TOP 1 행만 요청하므로 SQL Server는 모든 행을 검토하고 결과를 계산할 필요가 없습니다. 성능상의 이유로 SQL Server는 TOP 1 행을 선택하고 그 결과를 계산하여 반환합니다.

TOP 1과 0으로 나눈 값을 얻는 것은 우연입니다. TOP 1을하지 않고 ORDER BY를하지 않으면 똑같은 오류가 발생합니다.

0
SELECT TOP 1 
    (InvBuyPriceValue/InvL_Quantity) * 
    iu.ItemUnit_UnitQuantity/iu.ItemUnit_MainUnitQuantity * 
    @MUQ/@UQ AS InvBuyPrice, 

. InvL_Quantity 또는 ItemUnit_MainUnitQuantity 열은 0 값을 포함 할 수 있습니다.

또한 @UQ에 할당되는 값인 ItemUnit_UnitQuantity을 확인하십시오. 또한 제수이기도합니다.

관련 문제