用空值替换/评估嵌套查询| Oracle SQL
我使用下面的查询,如果有点混乱,我很抱歉这是我得到这个结果的唯一方法:)但是在最左边的“PO”列中,当它全部完成时,有一个(null)的实例,请参见示例输出。这导致当我可以确认它们应该有值时,数值显示为(null) 我使用了NVL、NVL2、COALESCE函数,但没有成功用空值替换/评估嵌套查询| Oracle SQL,sql,oracle,null,Sql,Oracle,Null,我使用下面的查询,如果有点混乱,我很抱歉这是我得到这个结果的唯一方法:)但是在最左边的“PO”列中,当它全部完成时,有一个(null)的实例,请参见示例输出。这导致当我可以确认它们应该有值时,数值显示为(null) 我使用了NVL、NVL2、COALESCE函数,但没有成功 select query2.PO, query2.Work_Group, query2.PO_QTY_TO_Move, query8.Active_Pick_Faces AS Active_Pick_Faces, query
select query2.PO, query2.Work_Group, query2.PO_QTY_TO_Move, query8.Active_Pick_Faces AS Active_Pick_Faces, query4.C0R_Qty_To_Move AS Move_C0R, query6.NA_Qty_To_Move AS Move_NA
from((select PO, Work_Group, SUM(qty_to_move) AS PO_Qty_To_Move
from(select order_header.purchase_order AS PO,order_header.work_group AS Work_Group, move_task.task_id, move_task.qty_to_move AS qty_to_move
from order_header
left join move_task
on order_header.order_id = move_task.task_id
where move_task.site_id = 'USCOL1' and move_task.client_id = 'SDRY-US' and move_task.status != 'Consol' )query1
group by PO, Work_Group)query2
left join
(select PO, Work_Group, SUM(qty_to_move) AS C0R_Qty_To_Move
from(select order_header.purchase_order AS PO,order_header.work_group AS Work_Group, move_task.task_id, move_task.from_loc_id, move_task.qty_to_move AS qty_to_move
from order_header
left join move_task
on order_header.order_id = move_task.task_id
left join location
on move_task.from_loc_id = location.location_id
where move_task.site_id = 'USCOL1' and move_task.client_id = 'SDRY-US' and location.work_zone = 'C0-R' and move_task.status != 'Consol' or order_header.purchase_order is null)query3
group by PO, Work_Group)query4
on query2.PO = query4.PO
left join
(select PO, Work_Group, SUM(qty_to_move) AS NA_Qty_To_Move
from(select order_header.purchase_order AS PO,order_header.work_group AS Work_Group, move_task.task_id, move_task.qty_to_move AS qty_to_move
from order_header
left join move_task
on order_header.order_id = move_task.task_id
where move_task.site_id = 'USCOL1' and move_task.client_id = 'SDRY-US' and move_task.from_loc_id like 'NA%' and move_task.from_loc_id not like '%PAL%' and move_task.status != 'Consol' )query5
group by PO, Work_Group) query6
on query2.PO = query6.PO
left join
(select PO, Work_Group, SUM(qty_to_move) AS Active_Pick_Faces
from(select order_header.purchase_order AS PO,order_header.work_group AS Work_Group, move_task.task_id, move_task.qty_to_move AS qty_to_move
from order_header
left join move_task
on order_header.order_id = move_task.task_id
left join location
on move_task.from_loc_id = location.location_id
where move_task.site_id = 'USCOL1' and move_task.client_id = 'SDRY-US' and location.work_zone in ('C0S','C0S2','LAUNCH','C0-RPALLET', 'TRANSIT')and move_task.status != 'Consol' or move_task.from_loc_id like '%PAL%')query7
group by PO, Work_Group) query8
on query2.PO = query8.PO)
您使用的连接条件如下:
on query2.PO = query8.PO
但null永远不等于(或不等于)任何其他值,因此如果PO
为null,则不能使用相等检查;您需要使用为null
。要同时检查这两个选项,可以执行以下操作:
on query2.PO = query8.PO
or (query2.PO is null and query8.PO is null)
.要理解SQL为什么会这样做,您必须认识到null在SQL中表示未知,而不是什么都没有。我们不知道一个未知值是否与另一个未知值相同。因此null与null不匹配,
null=null
不正确且null!=null
也不是真的。