在我的 Oracle DB 中,我有一个父工单与其子工单的左外连接。然后我运行一个计算,执行一些子值的 SUM()。我将子工单的结果包装在 Nvl() 中,以确保正确计算它们。
这有效,除非父级没有子工单。在这种情况下,显示期间返回的“空值”是因为连接中没有结果,因此 Nvl([fieldname],0) 似乎没有将它们转换为显示 0。因此,当我认为 sum具有父值的子值,由于将值添加到空值,它们也返回空值。
解决这个问题的最佳方法是什么?这是可以解决的问题,还是我的查询从根本上有问题的气味?
查询
抱歉,我目前无法发布它的设置。对于这个特定的工作订单(硬编码),连接的“右手”部分是空的,因为父级没有子级,因此显示为 null。
SELECT *
FROM (SELECT *
FROM R_PCR_ALLWOSANDTASKSSEPARATELY)WOINFO
LEFT OUTER JOIN (SELECT WORKORDERNUMBER AS TASKWORKORDRENUMBER
, PARENT AS TASKPARENT
, NVL(TOTALMATESTCOSTFORWO, 0) AS TOTALMATESTCOSTFORWO_TASK
, NVL(TOTALLABESTCOSTFORWO,0) AS TOTALLABESTCOSTFORWO_TASK
, NVL(TOTALMATACTCOSTFORWO,0) AS TOTALMATACTCOSTFORWO_TASK
, NVL(TOTALLABACTCOSTFORWO,0) AS TOTALLABACTCOSTFORWO_TASK
, NVL(TOTALLABACTHOURSFORWO,0) AS TOTALLABACTHOURSFORWO_TASK
FROM R_PCR_ALLWOSANDTASKSSEPARATELY)TASKINFO
ON ( WOINFO.WORKORDERNUMBER = TASKINFO.TASKPARENT )
WHERE WORKORDERNUMBER = '2826059';