加入 WIP_DISCRETE_JOBS 到物料清单 table

Joining WIP_DISCRETE_JOBS to a Bill Of Materials table

我有一个 SQL 查询,我试图在其中获取启用了物料清单 (BOM) 且创建日期在过去三年内的项目及其组件。 问题是每个项目及其组件列表都会重复。假设一个项目有 5 个组件,我用特定的项目编号进行查询。我得到 35 行(每组 5 个组件重复 7 次)。但是,如果我使用特定的 WIP_ENTITY_NAME 进行查询,或者如果我使用 DISTINCT,我将获得完美的 5 行数据。当我查询特定项目编号时,我需要获取此数据(5 行,无重复)。 这是查询:

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 table 中。有没有办法将这些列映射到任何 BOM table?我是新手,所以请大师们多多包涵。

我看到你问的是 Oracle e-Business Suite 数据模型。

trying to fetch items ... and whose creation date is withing the last three years.

您的查询不是这样做的。您正在获取过去 3 年内制作的项目的详细信息(通过 WIP 离散作业)——并且每次制作时您都会获得该项目的副本(即 WIP_DISCRETE_JOBS_V 中的每一次出现)。

如果您想要过去 3 年制作的项目,但您只想要每个项目一次,您应该使用 EXISTS(半连接)来过滤行而不是实际连接到 WIP_DISCRETE_JOBS_V,这将导致重复)。更多类似的内容:

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    EXISTS ( SELECT 'discrete job within the last 3 years'
                FROM   wip_discrete_jobs_v wdjv
                WHERE  wdjv.common_routing_sequence_id = borv.common_routing_sequence_id
                AND    wdjv.primary_item_id = borv.assembly_item_id
                AND    wdjv.creation_date >= ADD_MONTHS(SYSDATE, -12*3)
                )
--and MSI.SEGMENT1='9064090'

注意 -- 我尽可能地使它接近您的原始查询,并且我没有验证您使用的所有连接条件。因此,您的初始查询中可能存在一些我无意中复制的其他错误。

还有一点,使用表单视图并不是一个好习惯,例如 WIP_DISCRETE_JOBS_VBOM_OPERATIONAL_ROUTINGS_V。这些视图用于向在线表格提供数据。您的性能不仅会受到影响(因为它们包含您可能不需要的联接),而且,如果您访问 Oracle 的 eTRM 站点 (http://etrm.oracle.com/pls/etrm/etrm_pnav.show_object?c_name=BOM_OPERATIONAL_ROUTINGS_V&c_owner=APPS&c_type=VIEW),您将看到此警告:

Warning: Oracle does not recommend you query or alter datausing this view. It may change dramatically in subsequent minor or major releases.

最好从基表SELECT