Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Datensätze hierarchisch anzeigen lassen
Fabian710
myCSharp.de - Member



Dabei seit:
Beiträge: 44
Herkunft: Gütersloh

Themenstarter:

Datensätze hierarchisch anzeigen lassen

beantworten | zitieren | melden

verwendetes Datenbanksystem: SQL Server Management Studio 2008

Hallo Leute,
ich versuche die Datensätze aus meiner Tabelle hierarchisch anzeigen zu lassen. Habe schon ein wenig gegoogelt (Hierarchische Datenbankanfragen) doch es klappt noch nicht so ganz. Habe es mit folgendem Code probiert:

select level ,categorie_ID, LPAD(' ',2*(LEVEL-1)) || description description, group_ID
from Catalogue
start with categorie_ID=1
connect by prior categorie_ID = group_ID;	

Doch es wird das Level, LPAD Start With nicht erkannt...
Habt ihr eine Idee wie ich es stattdessen angezeigt bekommen?
private Nachricht | Beiträge des Benutzers
Robin0
myCSharp.de - Member



Dabei seit:
Beiträge: 213

beantworten | zitieren | melden

Ich hab die starke vermutung es gibt connect nicht in mssql

google mal nach UNION/UNION ALL
private Nachricht | Beiträge des Benutzers
vbprogger
myCSharp.de - Experte

Avatar #avatar-1820.gif


Dabei seit:
Beiträge: 1723
Herkunft: NRW/DE

beantworten | zitieren | melden

Hallo,

das sieht nach Oracle aus und das geht mit MS SQL nicht. Schau mal hier: Rekursive Abfragen mit MS SQL

Grüße
Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.
---------
Bemerkung: ich beantworte keine Fragen via PM, denn das Forum soll ja was davon haben!
private Nachricht | Beiträge des Benutzers
Fabian710
myCSharp.de - Member



Dabei seit:
Beiträge: 44
Herkunft: Gütersloh

Themenstarter:

beantworten | zitieren | melden

Zitat
Hallo,

das sieht nach Oracle aus und das geht mit MS SQL nicht. Schau mal hier: Rekursive Abfragen mit MS SQL

Grüße

Ich hab mich da mal etwas eingelesen...und meine Anfrage sieht nun wie folgt aus:

With Hierachy(categorie_ID, description, group_ID, Level)
AS
(
	SELECT categorie_ID, group_ID, description, 0 AS Level
	FROM Catalogue x
	WHERE x.categorie_ID = 'QK 50230365'
	UNION ALL
	SELECT x.categorie_ID, x.group_ID, x.description, y.Level+1
	FROM Catalogue x
	INNER JOIN Hierachy y
	ON x.group_ID = y.categorie_ID
)

SELECT categorie_ID, group_ID, description
FROM Hierachy
WHERE Level >0

Funktioniert auch, aber...ich hab ne Endlosschleife :-( und ich weiß nicht warum?
So wie ich das sehe, zählt er den Level Wert immer hoch, obwohl er bei manchen zurückgehen müsste, weil dieser in der Hierarchie weiter oben steht...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Fabian710 am .
private Nachricht | Beiträge des Benutzers
vbprogger
myCSharp.de - Experte

Avatar #avatar-1820.gif


Dabei seit:
Beiträge: 1723
Herkunft: NRW/DE

beantworten | zitieren | melden

Hallo,

ohne Kenntnisse über deine DB-Struktur kann man schlecht was sagen. Und so eine Abfrage kann auch nicht in eine Endlosschleife sich entarten, das geht nicht, es sei denn während der Abfrage fütterst du die Tabellen unaufhörlich mit Daten.

Grüße
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von vbprogger am .
Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.
---------
Bemerkung: ich beantworte keine Fragen via PM, denn das Forum soll ja was davon haben!
private Nachricht | Beiträge des Benutzers
Fabian710
myCSharp.de - Member



Dabei seit:
Beiträge: 44
Herkunft: Gütersloh

Themenstarter:

beantworten | zitieren | melden

Also in der Tabelle Catalogue sind 181 Datensätze.
Wenn ich den Wert der MAXRECURSION mal hochstelle...sehe ich das mir weit über 10.000 Datensätze dazu angezeigt werden. Deshalb meine Vermutung, dass es sich um eine Endlosschleife handelt. Bei manchen Datensätzen muss ja ein Level Schritt zurück gemacht werden. Wird es aber leider nicht...
private Nachricht | Beiträge des Benutzers
D-eath
myCSharp.de - Member



Dabei seit:
Beiträge: 240
Herkunft: Ingolstadt

beantworten | zitieren | melden

Wie gesagt, ohne Datenmodell schwer erkennbar. Hast du vielleicht irgendeinen Parameter für den JOIN vergessen, sodass deine Zeilen mehrfach ausgegeben werden?
private Nachricht | Beiträge des Benutzers
vbprogger
myCSharp.de - Experte

Avatar #avatar-1820.gif


Dabei seit:
Beiträge: 1723
Herkunft: NRW/DE

beantworten | zitieren | melden

Zitat von Fabian710
Also in der Tabelle Catalogue sind 181 Datensätze.
Wenn ich den Wert der MAXRECURSION mal hochstelle...sehe ich das mir weit über 10.000 Datensätze dazu angezeigt werden. Deshalb meine Vermutung, dass es sich um eine Endlosschleife handelt. Bei manchen Datensätzen muss ja ein Level Schritt zurück gemacht werden. Wird es aber leider nicht...

Es könnte ja sein, dass deine Tabelle sehr viele Verschachtelungsdaten enthält, so dass die Ergebnismenge entsprechend explodiert.
Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.
---------
Bemerkung: ich beantworte keine Fragen via PM, denn das Forum soll ja was davon haben!
private Nachricht | Beiträge des Benutzers