我有一个SQL查询,其中我试图获取物料及其物料清单(BOM)已启用且其创建日期与过去三年一致的物料。 问题是每个项目及其组件列表都会重复出现。假设一个项目有5个组件,我用特定的项目号码进行查询。我得到35行(7组重复5组)。但是,如果我使用特定的WIP_ENTITY_NAME进行查询,或者如果使用DISTINCT,则会得到完美的5行数据。我需要获取这些数据(5行,不重复),当我查询一个特定的物品编号时。 下面是查询:将WIP_DISCRETE_JOBS加入到物料清单表
SELECT *
FROM BOM_BILL_OF_MATERIALS BOM,
BOM_INVENTORY_COMPONENTS BIC,
BOM_COMPONENTS_B BCB,
BOM_OPERATIONAL_ROUTINGS_V BORV,
BOM_OPERATION_SEQUENCES_V BOSV,
BOM_STRUCTURES_B BSB,
BOM_STRUCTURE_TYPES_B BST,
MTL_SYSTEM_ITEMS_B MSI,
MTL_SYSTEM_ITEMS_TL MSIT,
ORG_ORGANIZATION_DEFINITIONS OOD,
WIP_DISCRETE_JOBS_V WDJV
WHERE BOM.BILL_SEQUENCE_ID = BIC.BILL_SEQUENCE_ID
AND BIC.COMPONENT_SEQUENCE_ID = BCB.COMPONENT_SEQUENCE_ID
AND BCB.BILL_SEQUENCE_ID = BSB.BILL_SEQUENCE_ID
AND BOM.STRUCTURE_TYPE_ID = BST.STRUCTURE_TYPE_ID
AND BOM.ASSEMBLY_ITEM_ID = MSI.INVENTORY_ITEM_ID
AND BOM.ORGANIZATION_ID = MSI.ORGANIZATION_ID
AND BOSV.ROUTING_SEQUENCE_ID = BORV.ROUTING_SEQUENCE_ID
AND BORV.ASSEMBLY_ITEM_ID = BOM.ASSEMBLY_ITEM_ID
AND BORV.ORGANIZATION_ID = BOM.ORGANIZATION_ID
AND MSI.INVENTORY_ITEM_ID = MSIT.INVENTORY_ITEM_ID
AND MSI.ORGANIZATION_ID = MSIT.ORGANIZATION_ID
AND MSIT.ORGANIZATION_ID = OOD.ORGANIZATION_ID
AND MSIT.LANGUAGE = USERENV('LANG')
AND sysdate BETWEEN BCB.EFFECTIVITY_DATE AND NVL(BCB.DISABLE_DATE, sysdate)
AND MSI.BOM_ENABLED_FLAG = 'Y'
AND NVL(MSI.ENABLED_FLAG,'X') ='Y'
AND OOD.ORGANIZATION_ID IN (203,204,328)
AND BORV.COMMON_ROUTING_SEQUENCE_ID = WDJV.COMMON_ROUTING_SEQUENCE_ID
AND BORV.ASSEMBLY_ITEM_ID = WDJV.PRIMARY_ITEM_ID
AND WDJV.CREATION_DATE > ADD_MONTHS(sysdate, -12*3)
AND WDJV.WIP_ENTITY_NAME = '28799'
--and MSI.SEGMENT1='9064090'
另外,我已发现,5集合彼此不同其WE_ROW_ID,REQUEST_ID_7,SCHEDULED_START_DATE,SCHEDULED_COMPLETION_DATE并且其存在于WIP_DISCREET_JOBS表中的其它列的基础上。有没有办法将这些列映射到任何BOM表?我对此很陌生,所以请耐心等待我的大师们。
请看[mcve]来改善你的问题。此外,旧的Oracle连接语法并不是一个好主意;考虑使用ANSI sql – Aleksej
@Aleksej考虑到ANSI SQL不在我手中。我必须使用这个语法。 –
@SoumyadeepPaul您仍然可以按照Aleksej的其他建议,从查询中删除不相关的表,连接,过滤器和选定的列,直到长度大概在10-15行而不是40个为止。大概所有这些外部连接的查找都不是导致问题呢?如果没有,请将其从查询中移除并重新发布。这将帮助我们帮助你! –