Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择并按零除的Oracle视图问题_Sql_Oracle_Null_View - Fatal编程技术网

Sql 选择并按零除的Oracle视图问题

Sql 选择并按零除的Oracle视图问题,sql,oracle,null,view,Sql,Oracle,Null,View,我想在Oracle中创建一个视图,用于计算“利用率百分比” 问题:有时sw.INSTALLED_端口或sw.MAX_installeble_端口可能为空(其他UTIL行也是如此) 有没有什么好的方法来做这样的事情: if (sw.INSTALLED_PORTS or sw.MAX_INSTALLABLE_PORTS == null) UTIL_INSTALLABLE_PORTS = null else (sw.INSTALLED_PORTS/sw.MAX_INSTALLABLE_

我想在Oracle中创建一个视图,用于计算“利用率百分比”

问题:有时sw.INSTALLED_端口或sw.MAX_installeble_端口可能为空(其他UTIL行也是如此)

有没有什么好的方法来做这样的事情:

if (sw.INSTALLED_PORTS or sw.MAX_INSTALLABLE_PORTS == null) 
      UTIL_INSTALLABLE_PORTS = null 
else (sw.INSTALLED_PORTS/sw.MAX_INSTALLABLE_PORTS)*100 AS UTIL_INSTALLABLE_PORTS,
可以使用COALESCE()从其参数中返回第一个非null值,如:

(COALESCE(sw.INSTALLED_PORTS, 0)/COALESCE(sw.MAX_INSTALLABLE_PORTS,1))*100  
 AS UTIL_DEVICE_PORTS

请注意,我在分母中使用了1作为合并默认值,您不希望使用除法/0。

按NULL除法与按零除法不同(正如您在标题中提到的问题)

从dual中选择1/null
=null
从dual中选择null/null
=null

因此,通过
(sw.INSTALLED\u PORTS/sw.MAX\u INSTALLED\u PORTS)*100
,您将自动获得所需

我认为,问题是当
sw.MAX\u INSTALLABLE\u port
为零时。在这种情况下,您可以使用以下选项:

case
  when sw.MAX_INSTALLABLE_PORTS = 0 then null
  else (sw.INSTALLED_PORTS/sw.MAX_INSTALLABLE_PORTS)*100
end
或者再短一点:

sw.INSTALLED_PORTS/NULLIF(sw.MAX_INSTALLABLE_PORTS,0)
问候,,
罗伯。

我认为这不是一回事。如果sw.INSTALLED_port或sw.MAX_INSTALLED_port为null,他希望UTIL_INSTALLED_port为null。对于以下情况,您的代码将返回0,但根据OP的代码,结果应为NULL:选择(COALESCE(NULL,0)/COALESCE(NULL,1))*100作为来自双端口的UTIL_设备_端口
case
  when sw.MAX_INSTALLABLE_PORTS = 0 then null
  else (sw.INSTALLED_PORTS/sw.MAX_INSTALLABLE_PORTS)*100
end
sw.INSTALLED_PORTS/NULLIF(sw.MAX_INSTALLABLE_PORTS,0)