WIE_WO_OPERATION_YIELDS_V

Details

  • Schema: FUSION

  • Object owner: WIE

  • Object type: VIEW

Columns

Name

WO_OPERATION_ID

WORK_ORDER_ID

MATERIAL_ISSUED_QTY

MATERIAL_REQUIRED_QTY

OUTPUT_COMPLETED_QTY

OUTPUT_EXPECTED_QTY

INTERMEDIATE_IN_QTY

INTERMEDIATE_OUT_QTY

YIELD_LOSS

PLANNED_YIELD

PLANNED_CUM_YIELD

ACTUAL_YIELD

ACTUAL_CUM_YIELD

Query

SQL_Statement

WITH operation_inputs AS (

SELECT wo_operation_id, SUM(nvl(issued_quantity/nvl(batch_uom_conversion_rate,1),0)) AS material_in_qty,

SUM(nvl(quantity/nvl(batch_uom_conversion_rate,1),0)) AS material_in_req_qty

FROM WIE_WO_OPERATION_MATERIALS

WHERE supply_type=1 and nvl(contribute_to_yield_flag,'N')='Y'

GROUP BY wo_operation_id

),

operation_outputs AS (

SELECT wo_operation_id, SUM(nvl(completed_quantity/nvl(batch_uom_conversion_rate,1),0)) AS material_out_qty,

SUM(nvl(output_quantity/nvl(batch_uom_conversion_rate,1),0)) AS material_out_req_qty

FROM WIE_WO_OPERATION_OUTPUTS

where completion_type='MANUAL'

GROUP BY wo_operation_id

),

operation_details AS (

SELECT

op.work_order_id,

op.wo_operation_id,

op.op_yield_factor AS planned_yield,

nvl(op.completed_quantity, 0) as intermediate_out_qty,

op.operation_seq_number,

op.previous_cp_op_seq_num,

nvl(i.material_in_qty, 0) material_in_qty,

nvl(i.material_in_req_qty, 0) material_in_req_qty,

nvl(ot.material_out_qty, 0) material_out_qty,

nvl(ot.material_out_req_qty, 0) material_out_req_qty

FROM WIE_WO_OPERATIONS_B op

LEFT JOIN operation_inputs i ON op.wo_operation_id = i.wo_operation_id

LEFT JOIN operation_outputs ot ON op.wo_operation_id = ot.wo_operation_id

),

recursive_yields (work_order_id, wo_operation_id, operation_seq_number, planned_yield, intermediate_out_qty, previous_cp_op_seq_num, material_in_qty, material_in_req_qty, material_out_qty, material_out_req_qty, intermediate_in_qty, yield_loss, actual_yield, actual_cum_yield, planned_cum_yield) AS (

SELECT

work_order_id,

wo_operation_id,

operation_seq_number,

planned_yield,

intermediate_out_qty,

previous_cp_op_seq_num,

material_in_qty,

material_in_req_qty,

material_out_qty,

material_out_req_qty,

0 AS intermediate_in_qty,

material_in_qty - (material_out_qty + intermediate_out_qty) AS yield_loss,

(material_out_qty + intermediate_out_qty) / NULLIF(material_in_qty,0) AS actual_yield,

(material_out_qty + intermediate_out_qty) / NULLIF(material_in_qty,0) AS actual_cum_yield,

planned_yield as planned_cum_yield

FROM operation_details

WHERE previous_cp_op_seq_num IS NULL

UNION ALL

SELECT

od.work_order_id,

od.wo_operation_id,

od.operation_seq_number,

od.planned_yield,

od.intermediate_out_qty,

od.previous_cp_op_seq_num,

od.material_in_qty,

od.material_in_req_qty,

od.material_out_qty,

od.material_out_req_qty,

ry.intermediate_out_qty intermediate_in_qty,

(ry.intermediate_out_qty + od.material_in_qty) - (od.material_out_qty + od.intermediate_out_qty) AS yield_loss,

(od.material_out_qty + od.intermediate_out_qty) / NULLIF((ry.intermediate_out_qty + od.material_in_qty),0) AS actual_yield,

(od.material_out_qty + od.intermediate_out_qty) / NULLIF(((ry.intermediate_out_qty / NULLIF(ry.actual_cum_yield, 0)) + od.material_in_qty),0) AS actual_cum_yield,

(((ry.intermediate_out_qty * (ry.planned_cum_yield / NULLIF(ry.actual_cum_yield,0) )) + od.material_in_qty) * od.planned_yield)/

NULLIF(((ry.intermediate_out_qty / NULLIF(ry.planned_cum_yield, 0) ) + (od.material_in_qty)),0) AS planned_cum_yield

FROM operation_details od

JOIN recursive_yields ry ON od.previous_cp_op_seq_num = ry.operation_seq_number and od.work_order_id = ry.work_order_id

)

SELECT

wo_operation_id,

work_order_id,

material_in_qty material_issued_qty,

material_in_req_qty material_required_qty,

material_out_qty output_completed_qty,

material_out_req_qty output_expected_qty,

intermediate_in_qty,

intermediate_out_qty,

yield_loss,

round(planned_yield, fnd_profile.value('INV_QUANTITY_DECIMAL_PRECISION')) planned_yield,

round(planned_cum_yield,fnd_profile.value('INV_QUANTITY_DECIMAL_PRECISION')) planned_cum_yield,

round(actual_yield, fnd_profile.value('INV_QUANTITY_DECIMAL_PRECISION')) actual_yield,

round(actual_cum_yield, fnd_profile.value('INV_QUANTITY_DECIMAL_PRECISION')) actual_cum_yield

FROM recursive_yields