簡體   English   中英

當我的使用順序得到“遇到零除錯誤”時。

[英]when use order by i get “Divide by zero error encountered.”

我有以下SQL查詢,如果我刪除按順序排列的最后一行,則該查詢有效。 任何人都可以告訴我為什么在我對該查詢進行排序時為什么此方法不起作用。

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語句中...

有分裂

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

因此可能InvL_Quantity或iu.ItemUnit_MainUnitQuantity為零。

如果沒有ORDER BY,為什么看不到SQL Server錯誤? 您只需要請求TOP 1行,因此SQL Server不需要遍歷所有行並計算結果。 出於性能原因,SQL Server僅選擇TOP 1行,為其計算結果並返回。

用TOP 1除以零會得到除零不是偶然的。 如果您不是TOP 1和ORDER BY,您肯定會看到相同的錯誤。

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

那是您進行除法的唯一地方。 InvL_QuantityItemUnit_MainUnitQuantity列都可能包含零值。

還要檢查ItemUnit_UnitQuantity ,這是分配給@UQ的值,它也是一個除數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM