Suponiendo que la tabla Cuentas tiene los campos IdPersona, IdCuenta y Saldo, y suponiendo que estás con Oracle 9i o superior, puedes obtener los 3 mayores saldos por persona con la función RANK(), por ejemplo:
Código:
select
IdPersona, Saldo
from
(select IdPersona,
Saldo,
rank() over (partition by IdPersona order by Saldo) r
from Cuentas)
where r <=3
/
Y después solo quedaría hacer un pivot para visualizar los registros como columnas y un join con la tabla Personas para obtener el nombre.
Saludos