大家好我正在使用DB2!我有一个查询,通过将里程表的变化作为分子和燃料购买总和作为分母来计算30天内的MPG。但是我有一个特殊的单位让我有些悲痛! 显然他在过去30天内没有购买任何燃料,因此导致我的查询返回错误
Division by zero was attempted. SQLState = 22012
我认为我可以聪明并使用coalesce
但它是一种不受支持的类型。
这是查询mpg!
ROUND(((SELECT MAX(ODOMETER)-MIN(ODOMETER) FROM ODOHIST O
WHERE READINGDATE >= CURRENT DATE - 30 DAYS AND O.UNIT_ID = DEFAULT_PUNIT)/
(SELECT SUM(T2.VOL_PFUEL) FROM FC_POS T2 WHERE T2.DRIVER_ID = DRIVER.DRIVER_ID AND POS_DATE >= CURRENT DATE - 30 DAYS)),2) AS MPG_30DAYS
而不是实际返回0的字段,它只是空白,那么是否有一个类似于coalesce
的函数会强制返回值?
感谢您的帮助!
答案 0 :(得分:2)
这意味着评估结果为0:
(SELECT SUM(T2.VOL_PFUEL)
FROM FC_POS T2
WHERE T2.DRIVER_ID = DRIVER.DRIVER_ID AND POS_DATE >= CURRENT DATE - 30 DAYS
)
我的建议是在声明中使用NULLIF()
:
(SELECT NULLIF(SUM(T2.VOL_PFUEL), 0)
FROM FC_POS T2
WHERE T2.DRIVER_ID = DRIVER.DRIVER_ID AND POS_DATE >= CURRENT DATE - 30 DAYS
)
这会将0
替换为NULL
,这可以解决问题。