La consulta está bien, lo que necesitas conseguir es que la visualización en pantalla salga "tabulada".
Si buscas información sobre el evento
OnGetText en los foros verás que hay muchos ejemplos. Básicamente te permite modificar el valor que se visualiza de un campo cuando lo muestras en un DBGrid. (
ej1,
ej2,...); de esta forma lo único que debes hacer es ańadir a tu valor X espacios por delante segun el campo nivel.
Revisa también
DupeString para montar una cadena de n espacios.