with recursive itens (nivel, codigo, pai , estrutura,
ordem, titulo, status, tipo , temfilhos) as (
select 0 as nivel, codigo, pai, estrutura,
ordem, titulo, status, substr(conteudo || ' ',1,1) tipo,
(CASE WHEN ((SELECT Count(*) FROM arvore arvore2
WHERE pai=arvore.codigo)=0)
THEN 'N'
ELSE 'S'
END) as temfilhos
from arvore
where pai = 0
union all
select itens.nivel + 1, arvore.codigo, arvore.pai ,
arvore.estrutura, arvore.ordem, arvore.titulo,
arvore.status, substr(arvore.conteudo || ' ',1,1) tipo,
(CASE WHEN ((SELECT Count(*) FROM arvore arvore2
WHERE pai=arvore.codigo)=0)
THEN 'N'
ELSE 'S'
END) as temfilhos
from itens
join arvore on itens.codigo = Arvore.pai
order by itens.nivel+1 desc, arvore.ordem )
select nivel, codigo, pai , estrutura,
ordem, titulo, status, tipo , temfilhos
from itens;