SQL Abfrage, die Baumstruktur darstellt

uweli

Benutzer
Beiträge
5
Erstmal ein freundliches Hallo,

ich habe ein Problem mit einer SQL Abfrage. Und zwar will ich aus einer Tabelle (Warengruppen) die Struktur der Warengruppen Auslesen. Die Tabelle enthällt: Warengruppennr, Parent, Warengruppenbezeichnung.
Die Ausgabe soll so ausehen: Warengruppennummer, Bezeichnung sortiert nach Alphabet mit eingefügten Kindern zu den jeweiligen Knoten. Dabei ist zu beachten das es hier teilweise bis zu 10 Ebenen gibt.
Bis zur 1. Ebene bekomme ich das Ganze hin und dann hört es auf. Es gibt in diesem Sinne keine Wurzel!
Ich wäre für eine Hilfe sehr dankbar.
 
Werbung:
Common Table Expression (Spezifisch: Rekursion)... Googlen, durchlesen, prüfen ob deine DB das kann :) (Leider hast du ja nicht angegeben was du benutzt...)
 
... so hab es nun gemacht - aber richtig funktionieren tut es nicht. Er gibt zwar alles aus, aber nicht als Hierarchie.
Irgendwie steht bei mir der Elefant auf der Leitung.
Hier der Code:

Code:
WITH RECURSIVE
  FK_Warengruppe_TEST (Parent, WarengrpNr, Bezeichnung, Lev) AS
( ( SELECT Parent, WarengrpNr, Bezeichnung, 1 As Lev
  FROM FK_Warengruppe AS e
  WHERE Parent = 0)
  UNION ALL
  ( SELECT e.Parent, e.WarengrpNr, e.Bezeichnung, m.Lev + 1
  FROM FK_Warengruppe AS e JOIN FK_Warengruppe_Test AS m
  ON  m.WarengrpNr = e.Parent
  ) )
SELECT  * FROM FK_Warengruppe_TEST
 
Zuletzt bearbeitet von einem Moderator:
So müsste es gehen (nicht getestet...)
Code:
With recursive fk_warengruppe_test
(
 Parent
,warengrpnr
,bezeichnung
,lev
,hierarchie_sort
) As
((Select Parent
         ,warengrpnr
         ,bezeichnung
         ,1 As lev
         ,Parent as hierarchie_sort
   From   fk_warengruppe As e
   Where  Parent = 0)
  Union All

  (Select e.parent
         ,e.warengrpnr
         ,e.bezeichnung
         ,m.lev + 1
         ,m.hierarchie_sort + '/' + e.parent
   From   fk_warengruppe As e
   Join   fk_warengruppe_test As m
   On     m.warengrpnr = e.parent))

Select parent
      ,warengrpnr
      ,bezeichnung
      ,lev
From   fk_warengruppe_test
Order  By hierarchie_sort asc
 
Erstmal vielen herzlichen DANK !!!
... leider nicht :( (Spalte "Parent" = Integer , Spalte "Warengrnr" = Integer)
ich bin am verzweifeln....
Rekursive Spalte 5: Konvertierung von 'integer' auf 'integer' verliert Gesamtstellenzahl
 
Dürfte daran liegen, daß im Select nach dem UNION da in der Spalte ein String zusammengefrickelt wird, im ersten Select aber ein INT. Ich denke, wenn man das im ersten Select gleich nach Text castet sollte es passen.
 
:) Ihr seid die besten - DANKE, DANKE, DANKE !!!!
Hier der funktionierende Code:

Code:
With recursive fk_warengruppe_test
(
Parent, warengrpnr, bezeichnung, hierarchie_sort
) As
((Select Parent, warengrpnr, bezeichnung, Cast(warengrpnr AS CHAR) as hierarchie_sort
From  fk_warengruppe As e
Where  Parent = 0)
Union All
(
Select e.parent, e.warengrpnr, e.bezeichnung, m.hierarchie_sort + '_' + Cast(e.warengrpnr AS CHAR)
From fk_warengruppe As e
Join  fk_warengruppe_test As m
On  m.warengrpnr = e.parent)
)
Select parent, warengrpnr, bezeichnung, hierarchie_sort
From  fk_warengruppe_test
Order By hierarchie_sort ASC
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Zurück
Oben