Это должно работать практически на каждом диалекте SQL:
SELECT last_name, first_name FROM names
WHERE last_name IN (
SELECT last_name FROM names GROUP BY last_name HAVING COUNT(*) > 1
)
Это даст вам набор результатов, подобный этому, хотя:
Smith Jack
Smith Joe
Smith Anna
Sixpack Joe
Sixpack Eve
Самое элегантное решение для отображения этого в желаемом формате IMO - просто переупорядочить результирующий набор программно в клиентском приложении, вместо того, чтобы выполнять все виды неясных трюков SQL; что-то вроде (псевдокод):
for each row in resultset
if row[last_name] <> previous_last_name
print newline, print last_name
print ' '
print first_name