Вы можете использовать точку разворота вместо самостоятельного объединения:
select sub_id, adsl, fixed_line
from (
select aname, atype, sub_id
from assets
where atype in ('adsl', 'fixed line')
)
pivot (
max(aname) for (atype) in ('adsl' as adsl, 'fixed line' as fixed_line)
) p
order by sub_id;
SUB_ID ADSL FIXED_LINE
---------- ------------------------------ ------------------------------
42504556 superfast internet 8 line
42551344 superfast internet 32 line
49000000 line
49000131 line
49000323 line
49111222 superfast internet 50 line
49555333 line
7 rows selected.
db <> fiddle
Если вы действительно хотите присоединиться самостоятельно, тогда вы можно использовать подзапросы для получения различных типов, а затем выполнить полное внешнее объединение:
select coalesce(a.sub_id, b.sub_id) as sub_id, a.aname, b.aname
from (
select sub_id, aname
from assets
where atype = 'adsl'
) a
full outer join (
select sub_id, aname
from assets
where atype = 'fixed line'
) b
on a.sub_id = b.sub_id
order by sub_id;
SUB_ID ANAME ANAME
---------- ------------------------------ ------------------------------
42504556 superfast internet 8 line
42551344 superfast internet 32 line
49000000 line
49000131 line
49000323 line
49111222 superfast internet 50 line
49555333 line
7 rows selected.
db <> fiddle
... но стержень чище, и при необходимости проще расширить на несколько типов / столбцов позже.
Если у вас не может быть ADSL без фиксированной линии, тогда это немного проще - вам не нужно полное внешнее объединение или подзапросы:
select b.sub_id, a.aname, b.aname
from assets b
left join assets a
on a.sub_id = b.sub_id
and a.atype = 'adsl'
where b.atype = 'fixed line'
order by sub_id;
SUB_ID ANAME ANAME
---------- ------------------------------ ------------------------------
42504556 superfast internet 8 line
42551344 superfast internet 32 line
49000000 line
49000131 line
49000323 line
49111222 superfast internet 50 line
49555333 line
7 rows selected.