Sql 当使用订单时,我得到;遇到除以零的错误。”;
我有下面的SQL查询,如果我删除最后一行order by,它就会工作。 有谁能告诉我,为什么我在这个查询上下订单时,这不起作用Sql 当使用订单时,我得到;遇到除以零的错误。”;,sql,sql-server,Sql,Sql Server,我有下面的SQL查询,如果我删除最后一行order by,它就会工作。 有谁能告诉我,为什么我在这个查询上下订单时,这不起作用 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 (I
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
我得到的错误是:
遇到被零除的错误。
我不明白为什么我在ORDERBY上得到这个错误,而不是在select语句中
SELECT TOP 1
(InvBuyPriceValue / InvL_Quantity) *
iu.ItemUnit_UnitQuantity / iu.ItemUnit_MainUnitQuantity *
@MUQ / @UQ AS InvBuyPrice,
这是您执行分区的唯一地方。InvL\u Quantity
或ItemUnit\u MainUnitQuantity
列可能包含值零
同时检查
ItemUnit\u UnitQuantity
,这是分配给@UQ
的值,也是一个除数。中有除数
select top 1 (InvBuyPriceValue/InvL_Quantity)*iu.ItemUnit_UnitQuantity/iu.ItemUnit_MainUnitQuantity*@MUQ/@UQ
所以可能InvL_数量或iu.ItemUnit_MainUnitQuantity为零
如果没有ORDER BY,为什么看不到SQL Server错误?您只请求前1行,因此SQL Server不需要检查所有行并计算结果。出于性能方面的原因,SQL Server只选择最上面的1行,计算结果并返回结果
你得到的除法是0和前1,而不是没有,这只是偶然的。如果您没有TOP 1和ORDER BY,您肯定会看到相同的错误。(InvBuyPriceValue/InvL_Quantity)在将其与ORDER BY除以之前检查此值。您应该看到发生了什么。因为如果没有order by,它可以只取为结果集计算的第一行,并且(可能)该行碰巧包含非零的
InvL\u Quantity
和iu.ItemUnit\u MainUnitQuantity
值。但是当您添加ORDER BY
时,必须生成更多的行,并且其中一行或多行包含上述一个或两个值的零值。