Cuộc sống sẽ dễ dàng hơn nếu tất cả các điều khoản của bạn được sắp xếp theo thứ tự tăng dần.
Tôi giả định rằng ứng dụng thực tế của bạn đang sử dụng một biến thay vì một chuỗi được mã hóa cứng. Vì vậy, giải pháp sẽ giống như sau:
select city, postcode, name
from dealers
where name = p_search_term OR
postcode = p_search_term OR
city = p_search_term
ORDER BY case when postcode = p_search_term then p_search_term else 1 end desc
, case when name = p_search_term then p_search_term else city end asc