我正在使用此语句获取商品的单价
(CAST (SalesPrice AS Float) /CAST ( Quantity AS Float)) as [UnitPrice]
在我开始的示例中工作正常,但是如果查询整个数据库,我会得到
除以零错误。
那是我的第一个问题。当我没有收到该错误时,第二个问题是SalesPrice
显示为负数,而我使用*-1
显示为正数。
是否可以使用[UnitPrice]
做同样的事情?
它需要显示为肯定。
答案 0 :(得分:1)
我不知道您为什么会得到负数,但是请使用NULLIF()
来防止被零除:
CAST(SalesPrice AS Float) / NULLIF(CAST( Quantity AS Float), 0) as [UnitPrice]
您可以使用ABS()
从其他任何数字中获取正数。
答案 1 :(得分:0)
您可以使用CASE
有条件地执行您的功能。例如,
CASE
WHEN Quantity = 0 then 0
ELSE ABS(CAST(SalesPrice AS Float) / CAST(Quantity AS Float))
END as [UnitPrice]
请注意,将ABS
包裹在除法结果上以获得正数。
答案 2 :(得分:0)
我不确定您为什么将SalesPrice和Quantity转换为Float。根据它们的名称,它们都应该是某种数字数据类型。
SELECT ABS(SalesPrice / NULLIF(Quantity, 0)) as [UnitPrice] FROM MyTable;
这应将任何被0除的错误转换为NULL结果。并且还应确保每个结果都是肯定的。