我正在为具有用于计算的Case When语句的Oracle数据库编写SQL。像'1‘这样的当前方法没有给我所有的整数,所以我正在寻找一种方法来判断如果NBR_UNITS/STD_PACK_QTY是一个整数,那么'Case Pick’,如果它是一个小数,那么'Unit pick‘。
下面是SQL现在所使用的部分:
CASE
WHEN (NBR_UNITS/STD_PACK_QTY) like '1' THEN 'Case Pick'
WHEN (NBR_UNITS/STD_PACK_QTY) < '1' THEN 'Unit Pick'
ELSE 'Error'
END "Case Picks"下面是一个数据示例。我尝试让SQL在除法计算是任意整数时输出'Case Pick‘,如果是任意小数则输出'Unit Pick’。
谢谢!
发布于 2017-02-01 05:54:51
此特定示例的最简单解决方案是使用MOD函数。
CASE
WHEN MOD(NBR_UNITS,STD_PACK_QTY) > 0 THEN 'Case Pick'
WHEN MOD(NBR_UNITS,STD_PACK_QTY) = 0 THEN 'Unit Pick'
END "Case Picks"发布于 2017-02-01 05:46:42
检查任何数值表达式x是否为整数的标准方法是
case when x = round(x) then ...
when x < 1 then...
else ... end as ....(假设与1比较是正确的事情;不确定,我在原始帖子下面的评论中提出了一个澄清问题)。
发布于 2017-02-01 05:49:21
将除法与除法的trunc/floor/四舍五入进行比较。
WHEN (NBR_UNITS/STD_PACK_QTY) = TRUNC(NBR_UNITS/STD_PACK_QTY) THEN 'Case Pick'不确定你的规则是什么,你是否可以只使用其他方法来捕获其他所有东西-例如,如果case数量是24,而他们给你36,可以吗?如果是这样,那么else基本上捕获了其他所有内容,对吧?然而,如果这不是很好,并且单位数量只有< 24,那么ELSE (NBR_UNITS/STD_PACK_QTY) < 1是有效的,否则可能是一个错误。
https://stackoverflow.com/questions/41967938
复制相似问题