Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SQL Abfrage, die Baumstruktur darstellt

Dieses Thema im Forum "Andere Datenbankserver" wurde erstellt von uweli, 19 August 2015.

  1. uweli

    uweli Benutzer

    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.
     
  2. Distrilec

    Distrilec Datenbank-Guru

    Common Table Expression (Spezifisch: Rekursion)... Googlen, durchlesen, prüfen ob deine DB das kann :) (Leider hast du ja nicht angegeben was du benutzt...)
     
  3. uweli

    uweli Benutzer

    Erstmal DANKE für die schnelle Antwort.
    Ich benutze eine Sybase DB.
    An Rekursion hätte ich auch denken können.....
     
  4. uweli

    uweli Benutzer

    ... 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 von einem Moderator bearbeitet: 20 August 2015
  5. Distrilec

    Distrilec Datenbank-Guru

    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
     
  6. uweli

    uweli Benutzer

    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
     
  7. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  8. Distrilec

    Distrilec Datenbank-Guru

    Ups... Sry... Ja, musst das Ganze natürlich zu Text casten :oops: Macht der Gewohnheit, da sowas bei mir Grundsätzlich immer Text ist...
     
    akretschmer gefällt das.
  9. uweli

    uweli Benutzer

    :) 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 von einem Moderator bearbeitet: 22 August 2015
  10. akretschmer

    akretschmer Datenbank-Guru

    Joa. Immer wieder gerne ;-)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden