SELECT CASE COUNT(*)
WHEN 0 THEN NULL
WHEN 1 THEN MAX( 'along ' || mr.major_route_name
|| ' between ' || mc1.major_city_name
|| ' and ' || mc2.major_city_name )
ELSE
REPLACE( REGEXP_REPLACE( LISTAGG( 'along ' || mr.major_route_name
|| ' between ' || mc1.major_city_name
|| ' and ' || mc2.major_city_name
, '::' )
WITHIN GROUP ( ORDER BY mr.major_route_traffic DESC )
, '::'
, ' and '
, 1
, COUNT(*) - 1 )
, '::'
, ', ' )
END route_text
FROM supercharger_locations sl
INNER JOIN supercharger_location_routes slr
ON slr.supercharger_location_id = sl.supercharger_location_id
INNER JOIN major_routes mr
ON mr.major_route_id = slr.major_route_id
INNER JOIN major_cities mc1
ON mc1.major_city_id = mr.major_city_id_1
INNER JOIN major_cities mc2
ON mc2.major_city_id = mr.major_city_id_1
WHERE sl.supercharger_location_id = :p_supercharger_location_id;