将WIP_DISCRETE_JOBS加入物料清单表

时间:2016-09-22 11:13:37

标签: sql oracle oracle11g oracle-sqldeveloper

我有一个SQL查询,其中我试图获取项目及其组件,这些组件已启用物料清单(BOM)且其创建日期为过去三年。 问题是每个项目及其组件列表都会重复出现。假设一个项目有5个组件,我查询特定的项目编号。我得到35行(7个重复的5个组件)。但是,如果我使用特定的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表中存在的其他列的基础上彼此不同。有没有办法将这些列映射到任何BOM表?我是新手,所以请跟我一起大师。

1 个答案:

答案 0 :(得分:2)

我看到您在询问Oracle电子商务套件数据模型。

  
    

尝试获取项目......并且其创建日期为过去三年。

  

这不是您的查询正在做的事情。您将获得过去3年内所制作项目的详细信息(通过WIP离散工作) - 并且每次制作时都会获得该项目的副本(即WIP_DISCRETE_JOBS_V中的每次出现)。< / p>

如果您想要在过去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),您将看到此警告:

  

警告:Oracle建议您不要使用此查询或更改数据   视图。它可能会在随后的次要或重大变化   版本。

最好从基表中SELECT