Możesz użyć zmiennej, aby sprawdzić, czy ostatni identyfikator jest równy bieżącemu, i w takim przypadku zamiast tego wypisz null lub ''.
select
case when c.ClientId <> @clientid then c.Name else '' end as ClientName,
case when c.ClientId <> @clientid then @ClientId := c.ClientId else '' end as ClientId,
p.ContactId,
p.Name as ContactName
from
Clients c
inner join Contacts p on p.ClientId = c.Clientid
, (select @clientid := -1) x
order by
c.ClientId, p.ContactId
Przykład:http://sqlfiddle.com/#!2/658e4c/6
Uwaga, jest to trochę zwariowane. Celowo zrobiłem ClientId jako drugie pole, aby móc zmienić i zwrócić zmienną clientId w tym samym polu. W innych, bardziej skomplikowanych przypadkach, być może będziesz musiał to zrobić w osobnym polu. Ale aby wyeliminować to pole zastępcze z wyniku, musisz osadzić całe zapytanie w podselekcji i zdefiniować żądane pola we właściwej kolejności w zapytaniu najwyższego poziomu.