Поскольку у вас есть специальное требование для группировки строк с некоторой двусмысленностью (Rd & Road, St и Street, без чисел), вам необходимо сначала сравнить строки, чтобы иметь возможность их сравнивать. После этого вы можете просто использовать группу по (или по отдельности) для устранения двойных чисел.
with testtab AS(
select 'Smith St' as LOCATIONCOLUMN from dual
union all
select 'Smith Street' from dual
union all
select '10 Happy Lily Rd ' from dual
union all
select '52 Happy Lily Road' from dual
union all
select '52 Happy Lily road' from dual
union all
select 'notstreetorRoad' from dual
union all
select 'notstreetorRd' from dual
union all
select 'good road' from dual
)
select formatedLoc
from (select trim(regexp_replace(regexp_replace(regexp_replace(LOCATIONCOLUMN, 'St *$|Street *$', 'Street', 1, 0, 'Rd *$|Road *$', 'Road', 1, 0, 'i'), '\d', '')) as formatedLoc
from testtab) formatedTab
group by formatedLoc;
доходность
FORMATEDLOC
-----------------
Happy Lily Road
notstreetorRoad
good road
Smith Street
Он заменяет St на улицу, Rd на дорогу, удаляет все числа инаконец обрезает результат. Тогда вы можете легко устранить двойные числа.
Поскольку это очень специфично, вам придется самостоятельно добавлять другие возможные неоднозначные строки.