我正在处理Oracle中的一个查询。我正在使用事实表作为合同ID,以及产品和材料的维度。我需要在查询中而不是数据库中有一个解决方案。
我有一个示例结果输出,其中一些合同ID的值为空值。
我无法对空值进行硬编码,因为表中有许多其他合同ID。
每个唯一的合同id都有一个产品ID,每个产品都有多个物料。我想结合特定的产品PR000349059和材料,将空合同ID替换为17270。以便合同ID的每个空值都用它自己的值替换它。
select
fvpo_vpa_id contract_id,
dsai_prpr_sap_matnr product_ID,
dsai_sp_sap_matnr material_ID,
fvpo_quantity quantity
from vpa_sp right outer join
PP_SP
on fvpo_dsai_id = dsai_id

RESUlT:
CONTRACT_ID PRODUCT_ID MATERIAL_ID QUANTITY
17270 PR000349059 SP000748364 1962898
17270 PR000349059 SP000748366 2589732
17270 PR000349059 SP000748370 5565604
PR000349059 SP000010709
PR000349059 SP000748128
PR000349059 SP000748130
PR000349059 SP000748132
PR000349059 SP000748362 发布于 2020-04-03 08:28:50
好的,根据你的编辑和评论,我想我明白你在找什么了。在CONTRACT_ID为NULL的情况下,使用另一行中的CONTRACT_ID填充它,其中包含相同的PRODUCT_ID和NOT NULL CONTRACT_ID。此查询将帮助您实现以下目标:
SELECT NVL(fvpo_vpa_id, MIN(fvpo_vpa_id) OVER (PARTITION BY dsai_prpr_sap_matnr)) contract_id,
dsai_prpr_sap_matnr product_ID,
dsai_sp_sap_matnr material_ID,
fvpo_quantity quantity
FROM vpa_sp
RIGHT OUTER JOIN pp_sp ON fvpo_dsai_id = dsai_id;这将仅在CONTRACT_ID为NULL时替换它,并且我们能够找到填充了相同PRODUCT_ID的另一行。这是基于您提到的每个CONTRACT_ID应该只有一个PRODUCT_ID的假设
https://stackoverflow.com/questions/60996923
复制相似问题