Esto debería funcionar en casi todos los dialectos de SQL:
SELECT last_name, first_name FROM names
WHERE last_name IN (
SELECT last_name FROM names GROUP BY last_name HAVING COUNT(*) > 1
)
Sin embargo, le dará un conjunto de resultados como este:
Smith Jack
Smith Joe
Smith Anna
Sixpack Joe
Sixpack Eve
La solución más elegante para mostrar esto en el formato deseado, en mi opinión, es simplemente reorganizar el conjunto de resultados mediante programación en la aplicación cliente en lugar de extraer todo tipo de trucos oscuros de SQL; 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