Dit zou op vrijwel elk SQL-dialect moeten werken:
SELECT last_name, first_name FROM names
WHERE last_name IN (
SELECT last_name FROM names GROUP BY last_name HAVING COUNT(*) > 1
)
Het geeft je echter een resultatenset zoals deze:
Smith Jack
Smith Joe
Smith Anna
Sixpack Joe
Sixpack Eve
De meest elegante oplossing om dit in het gewenste formaat IMO weer te geven, is om de resultatenset gewoon programmatisch opnieuw te rangschikken in de clienttoepassing in plaats van allerlei obscure SQL-stunts uit te halen; zoiets als (pseudocode):
for each row in resultset
if row[last_name] <> previous_last_name
print newline, print last_name
print ' '
print first_name