我在SQL中有一个case语句,它本身可以很好地工作(返回一个预期的非零数字),但是当我尝试用它来划分另一个表达式时,它给出了0除以0的错误。这是一个非常基本的总和(案例值1,当99999然后valueA else 0结束)语句。基本上,这就是我所拥有的:
select
sum(case value1 when 99999 then valueA else 0 end) as [Value 1],
(sum(case value2 when 99999 then valueB else 0 end)) / (sum(case value1 when 99999 then valueA else 0 end)) as [Value 2]
有没有人知道为什么这不起作用?任何帮助将非常感激!
答案 0 :(得分:0)
这基本上由评论覆盖,但你的红利不需要为0.所以如果它不是99999那么你会得到0/1 = 0而不是0/0 =除以零错误。
{{1}}
答案 1 :(得分:0)
在某些情况下,您可以获得零除错误。在这里,我将字段更改为变量,并将它们设置为行生成错误的条件。只需陷入零值分母。
DECLARE @value1 int
DECLARE @valueA int
DECLARE @value2 int
DECLARE @valueB int
SET @value2 = 99999
SET @valueB = 13
SET @value1 = 99998
SET @valueA = 7
SELECT
sum(case @value1 when 99999 then @valueA else 0 end) as [Value 1],
(sum(case @value2 when 99999 then @valueB else 0 end)) AS [Numerator],
(sum(case @value1 when 99999 then @valueA else 0 end)) as [Denominator],
--(sum(case @value2 when 99999 then @valueB else 0 end)) / (sum(case @value1 when 99999 then @valueA else 0 end)) as [Value 2], --your line that may return an error
[My Value 2] = CASE WHEN (sum(case @value1 when 99999 then @valueA else 0 end)) = 0 THEN
--'undefined'
0
ELSE
--CONVERT(nvarchar(max),
(sum(case @value2 when 99999 then @valueB else 0 end)) / (sum(case @value1 when 99999 then @valueA else 0 end))
-- )
END