Если вы просто хотите выбрать родительские значения, вот один из способов:
WITH table1 AS (SELECT 64 ID, 'HI02-01' e_id, 'ABF' e_value, 32 line_num FROM dual UNION ALL
SELECT 64 ID, 'HI02-02' e_id, 'E039' e_value, 32 line_num FROM dual UNION ALL
SELECT 64 ID, 'HI03-01' e_id, 'XYZ' e_value, 32 line_num FROM dual UNION ALL
SELECT 64 ID, 'HI03-02' e_id, 'E039' e_value, 32 line_num FROM dual UNION ALL
SELECT 64 ID, 'AI05-01' e_id, 'XYZ' e_value, 32 line_num FROM dual UNION ALL
SELECT 64 ID, 'AI05-02' e_id, 'E039' e_value, 32 line_num FROM dual UNION ALL
SELECT 67 ID, 'HI02-01' e_id, 'ABC' e_value, 28 line_num FROM dual UNION ALL
SELECT 67 ID, 'HI02-02' e_id, 'R590' e_value, 28 line_num FROM dual UNION ALL
SELECT 67 ID, 'HI03-01' e_id, 'WQE' e_value, 28 line_num FROM dual)
SELECT ID,
e_id,
e_value,
line_num,
CASE WHEN e_id LIKE 'HI%' THEN first_value(e_id) OVER (PARTITION BY ID, line_num, CASE WHEN e_id LIKE 'HI%' THEN SUBSTR(e_id, 1, 4) END ORDER BY e_id) END parent_e_id,
CASE WHEN e_id LIKE 'HI%' THEN first_value(e_value) OVER (PARTITION BY ID, line_num, CASE WHEN e_id LIKE 'HI%' THEN SUBSTR(e_id, 1, 4) END ORDER BY e_id) END parent_e_value
FROM table1;
ID E_ID E_VALUE LINE_NUM PARENT_E_ID PARENT_E_VALUE
---------- ------- ------- ---------- ----------- --------------
64 HI02-01 ABF 32 HI02-01 ABF
64 HI02-02 E039 32 HI02-01 ABF
64 HI03-01 XYZ 32 HI03-01 XYZ
64 HI03-02 E039 32 HI03-01 XYZ
64 AI05-01 XYZ 32
64 AI05-02 E039 32
67 HI02-01 ABC 28 HI02-01 ABC
67 HI02-02 R590 28 HI02-01 ABC
67 HI03-01 WQE 28 HI03-01 WQE
При этом используется аналитическая функция first_value
для вывода первого значения в каждой группе, но только когда e_id начинается с HI. Я предполагаю, что все HI% e_ids имеют одинаковый формат XXNN-NN.