Sie können eine Variable verwenden, um zu prüfen, ob die letzte ID gleich der aktuellen ID ist, und in diesem Fall stattdessen null oder '' ausgeben.
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
Beispiel:http://sqlfiddle.com/#!2/658e4c/6
Beachten Sie, dass dies ein bisschen hacky ist. Ich habe ClientId absichtlich zum zweiten Feld gemacht, damit ich die clientId-Variable im selben Feld ändern und zurückgeben kann. In anderen, komplizierteren Fällen müssen Sie dies möglicherweise in einem separaten Feld tun. Aber um dieses Platzhalterfeld aus dem Ergebnis zu entfernen, müssen Sie die gesamte Abfrage in eine Unterauswahl einbetten und die gewünschten Felder in der richtigen Reihenfolge in der Abfrage der obersten Ebene definieren.