Если count(*)
= 1, то вы можете использовать join
с агрегацией
SELECT t1.*, t2.e_nm, t2.x
FROM table1 t1 LEFT JOIN
(SELECT t2.c_type, t2.h_level, t2.loop, t2.e_id,
MIN(t2.e_nm) as e_nm, MIN(x) as x
FROM table2 t2
GROUP BY t2.c_type, t2.h_level, t2.loop, t2.e_id
HAVING COUNT(*) = 1
) t2
ON t2.c_type = t1.c_type AND
t2.h_level = t1.h_level AND
t2.loop = t1.loop AND
t2.e_id = t1.e_id
ORDER BY t1.f_name, t1.line_num;
Это работает, потому что у вас есть COUNT(*) = 1
, поэтому соответствует только одна строка. Если вы этого не сделаете, вы все равно можете использовать KEEP
:
MIN(x) KEEP (DENSE_RANK FIRST ORDER B t2.e_num ASC) as x