Isso deve funcionar em praticamente todos os dialetos SQL:
SELECT last_name, first_name FROM names
WHERE last_name IN (
SELECT last_name FROM names GROUP BY last_name HAVING COUNT(*) > 1
)
No entanto, ele fornecerá um conjunto de resultados como este:
Smith Jack
Smith Joe
Smith Anna
Sixpack Joe
Sixpack Eve
A solução mais elegante para exibir isso no formato desejado IMO é apenas reorganizar o conjunto de resultados programaticamente no aplicativo cliente, em vez de puxar todos os tipos de truques SQL obscuros; algo como (pseudocódigo):
for each row in resultset
if row[last_name] <> previous_last_name
print newline, print last_name
print ' '
print first_name