加入 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_V
或 BOM_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
。
我有一个 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_V
或 BOM_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
。