# sql abfrage mit rekursion, mit oder ohne cte...



## ruutaiokwu (22. Aug 2014)

hallo zusammen,

habe folgendes problem:

in einer anwendung geht es darum, dass man entweder a.) ganze kontinente oder b.) eine teilmenge an ländern ganzer kontinente wählen kann.

später sollte das folgendermassen ausgegeben werden:

*Europa*, *Asian:* Japan, Taiwan, Thailand, *Amerika*, *Afrika:* Kenia, Tansania

...aber nicht zwangsläufig in dieser farbe, habe das nur gefärbt damit es einfacher zu erkennen ist. (Fett hingegen schon, aber das ist ;-))


mir liegt eine rekursive funktion vor, welche aus einer tabelle (wo versch. ebenen eingetragen sind, nicht nur kontinente und länder).

nun müsste das nach folgender regel ablaufen: wenn ein kontinent-knoten in der baumförmigen struktur GENAU so viele unterknoten entält wie sich länder drin befinden, dann ist davon auszugehen dass ein ganzer kontinent ausgewählt wurde. in diesem fall brauches es keinen text in der art "Kontinent: A, B, C, D, E..." usw.

Wüsste da jemand was?

Danke für die feedbacks!


----------



## JavaMeister (22. Aug 2014)

Wie sieht die Datenstruktur aus?

Sieht aber nicht aus wie ein SQL Problem.


----------



## ruutaiokwu (22. Aug 2014)

eine tabelle mit versch. ebenen (kontinente, regionen, länder) welche per "node of" miteinander verknüpft sind.

doch, ich muss das ganze in sql lösen, und am schluss die einzelnen strings "Europa, Asien: xxx, Amerika: yyy" per sql server STUFF/XML FOR-befehl zusammenfassen. (natürlich mit ', ' dazwischen!)

die per concatenation zusammengefügten string sollen in exakt EINEM record zurückkommen. 1 eintrag per person, untsch. regionen/kontinente sind nicht in mehreren datensätzen. der grund ist, dass auf dem frontend der text auch horizontal gerendert wird. so kann ich 1:1 ausgeben, direkt vom feld des resultsets der stored procedure her...


----------



## ruutaiokwu (22. Aug 2014)

nachtrag: der string, welcher dann im feld des resultsets der stored procedure ist, muss natürlich noch entsprechend aufbereitet werden, damit auch klar ist wo ein ganzer kontinent der fall ist:

<c>Europa, </c><c>Asian:</c> Japan, Taiwan, Thailand, <c>Amerika</c>, <c>Afrika:</c> Kenia, Tansania
(direkt <b> zu verwenden und so im html auszugeben wäre auch was, aber html in einer stored procedure... hmm...)


...aber das ist eigentlich nebensächlich, auch dass der string in einem einzelnen feld ausgegeben werden muss.

viel wichtiger ist für mich zu erfahren, wie ich das realisieren kann dass wenn ein kontinent-knoten ALLE länder beinhaltet dass dann nur der kontinentname ohne ':' ausgegeben wird...


----------



## JavaMeister (23. Aug 2014)

Also wir wissen folgendes nicht:

Wie sieht die Datenstruktur aus.

Welche Beispieldaten gibt es?

Zu den Beispieldaten: Welches Ergebnis wird erwartet bei gegebenen Input?

Wie sieht dein Ansatz aus und welches Abweichende Ergebnis kommt?

Handelt es sich um SQL oder eine Stored Procedure? (Wenn SP, dann siehe mein Satz oben).

Und vor allem: Um welche Datenbank handelt es sich hier? 

Rekursionen lässt sich mit relationen Algebra nicht abbilden.


----------



## ruutaiokwu (17. Jan 2018)

Hat sich geklärt!!


----------

