Postgres erlaubt auch rekursive Suche, hier ein Beispiel für das Organigramm:
with recursive org_rec (ebene,name,key_apnr,parent ,gueltig_seit,gueltig_bis,sort1) as (select 1 as ebene,O.name, O.key_apnr,O.parent ,O.gueltig_seit,O.gueltig_bis,trim(O.key_apnr) as sort1 from organigramm O where O.parent is null and today() between O.gueltig_seit and O.gueltig_bis union all (select R.ebene +1 as ebene,O2.name, O2.key_apnr,O2.parent ,O2.gueltig_seit,O2.gueltig_bis, R.sort1 || '_' || trim(O2.key_apnr) from organigramm O2,org_rec R where R.key_apnr=O2.parent and today() between R.gueltig_seit and R.gueltig_bis and today() between O2.gueltig_seit and O2.gueltig_bis ) ) --search depth first by name set sort1 select ebene,trim(name) as name,trim(key_apnr) as key,trim(parent) as parent,trim(sort1) as sort1 from org_rec order by sort1;
ergibt z.B.
ebene | name | key | parent | sort1 ------+--------------------------+---------+--------+------------------- 1 | Universität | 000 | | 000 2 | Lehre Hochschule | _9000 | 000 | 000__9000 3 | 01- WISO-Fakultät | 01 | _9000 | 000__9000_01 3 | 02- Rechtswiss. F. | 02 | _9000 | 000__9000_02 3 | 03- Medizinische F. | 03 | _9000 | 000__9000_03 3 | 04- Philosophische F. | 04 | _9000 | 000__9000_04 3 | 05- Math.-Nat. F. | 05 | _9000 | 000__9000_05 3 | 06- Humanwiss. F. | 06 | _9000 | 000__9000_06
Dieses Resultset könnte man direkt in Sichten als Quelle nutzen.