変数を使用して、最後のIDが現在のIDと等しいかどうかを確認できます。その場合は、代わりにnullまたは''を出力します。
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
例: http://sqlfiddle.com/#!2/658e4c/6
これは少しハッキーであることに注意してください。意図的にClientIdを2番目のフィールドにしたので、同じフィールドのclientId変数を変更して返すことができました。他のより複雑なケースでは、別のフィールドでそれを行う必要があるかもしれません。ただし、そのプレースホルダーフィールドを結果から削除するには、クエリ全体を副選択に埋め込み、必要なフィールドを最上位のクエリで正しい順序で定義する必要があります。