【问题标题】:when use order by i get "Divide by zero error encountered."当使用 order by 我得到“除以零错误”。
【发布时间】:2014-07-08 06:31:39
【问题描述】:

如果我删除最后一行是 order by,我有以下 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

我收到错误消息: 遇到除以零错误。

我不明白为什么我在 order by 而不是例如在 select 语句中收到此错误...

【问题讨论】:

  • (InvBuyPriceValue/InvL_Quantity) 在除以顺序之前检查此值。你应该看看发生了什么。
  • 因为没有 order by,它可以只取它为结果集计算的第一行,并且(可能)该行偶然包含非零 InvL_Quantityiu.ItemUnit_MainUnitQuantity 值。但是,当您添加 ORDER BY 时,必须生成更多行,并且其中一个或多个包含上述一个或两个值的零值。

标签: sql sql-server


【解决方案1】:

里面有分工

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,您肯定会看到同样的错误。

【讨论】:

    【解决方案2】:
    SELECT TOP 1
        (InvBuyPriceValue / InvL_Quantity) * 
         iu.ItemUnit_UnitQuantity / iu.ItemUnit_MainUnitQuantity * 
         @MUQ / @UQ AS InvBuyPrice,
    

    那是你进行分区的唯一地方。 InvL_QuantityItemUnit_MainUnitQuantity 列可能包含零值。

    还要检查ItemUnit_UnitQuantity,这是分配给@UQ 的值,它也是一个除数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 2015-04-16
      相关资源
      最近更新 更多