Dies sollte auf so ziemlich jedem SQL-Dialekt funktionieren:
SELECT last_name, first_name FROM names
WHERE last_name IN (
SELECT last_name FROM names GROUP BY last_name HAVING COUNT(*) > 1
)
Es wird Ihnen jedoch eine Ergebnismenge wie diese geben:
Smith Jack
Smith Joe
Smith Anna
Sixpack Joe
Sixpack Eve
Die eleganteste Lösung, um dies im gewünschten Format anzuzeigen, besteht meines Erachtens darin, die Ergebnismenge einfach programmgesteuert in der Clientanwendung neu anzuordnen, anstatt alle möglichen obskuren SQL-Stunts durchzuführen. so etwas wie (Pseudocode):
for each row in resultset
if row[last_name] <> previous_last_name
print newline, print last_name
print ' '
print first_name