Если у вас есть только одна таблица, у меня это сработало
DECLARE @t TABLE
(
id int,
a_id int,
ref_z int,
name varchar(50)
)
INSERT INTO @t VALUES (1, 0, 1, 'James'),
(2, 0, 2, 'John'),
(3, 2, 2, 'John. S'),
(4, 0, 3, 'Martin'),
(5, 6, 3, 'Martin. M'),
(6, 2, 3, 'Martin. M. Mr')
DECLARE @a_id int = 2
SELECT COALESCE(table_b.name, (SELECT table_b2.name FROM @t AS table_b2 WHERE table_b2.a_id = 0 ORDER BY table_b2.id LIMIT 1)) AS name
FROM (
SELECT ref_z
FROM @t AS table_z
GROUP BY ref_z
) AS table_z
LEFT OUTER JOIN @t AS table_b ON table_b.ref_z = table_z.ref_z AND table_b.a_id = @a_id
И результаты:
James
John. S
Martin. M. Mr
Также обратите внимание, что это также будет отображать только одну запись (первую), если есть несколько совпадений для a_id = 0