我有一個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個爲止。大概所有這些外部連接的查找都不是導致問題呢?如果沒有,請將其從查詢中移除並重新發布。這將幫助我們幫助你! –