Du kan bruge en variabel til at kontrollere, om det sidste id er lig med det aktuelle id, og i så fald udlæse null eller '' i stedet.
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
Eksempel:http://sqlfiddle.com/#!2/658e4c/6
Bemærk, dette er lidt hacky. Jeg lavede bevidst ClientId til det andet felt, så jeg kunne ændre og returnere clientId-variablen i det samme felt. I andre mere omfattende tilfælde skal du muligvis gøre det i et separat felt. Men for at fjerne dette pladsholderfelt fra resultatet, skal du indlejre hele forespørgslen i et undervalg og definere de ønskede felter i den rigtige rækkefølge på forespørgslen på øverste niveau.