Announcement

Collapse
No announcement yet.

Rekursion und Addition

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Rekursion und Addition

    Hallo zusammen

    dies ist mein erster Beitrag hier, und ich hoffe er entspricht den allgemeinen Anforderungen hier und noch mehr ihr könnt mir helfen. Vorweg, ich werde eventuelle Antworten erst Montag lesen, weil ich gleich im wohlverdienten Wochenende bin.

    Aber zur Frage, es geht eben um Rekursion und Addition.

    Ich habe als Ausgangstabelle folgendes:


    Code:
    ID - Bezeichung - Vor_ID - Ebene
    1 - bla - 0 - 1
    2 - blub - 1 - 2
    ...
    1123 - xyz - 1100 - 4
    Also eine normale rekursive Tabelle.

    Das SQL dazu funktioniert auch

    Code:
    with rekursion (ID,Bez,Ebene,Vor,Tiefe) as
    (
    	select RK1.Vor_ID, RK1.Bezeichnung, RK1.Ebene, RK1.ID,1 as Tiefe 
    	from dbo.tbl_Rekursion as RK1 
    	
    union all
    	select rek.ID, RK2.Bezeichnung, RK2.Ebene, RK2.ID, rek.Tiefe + 1 
    	from dbo.tbl_Rekursion as RK2, rekursion as rek
    	where rek.Vor=RK2.Vor_ID 
    )
    Jetzt kommt mein Problem. Ich habe eine Wertetabelle, in der Werte für die unterste Ebene enthalten sind.

    Code:
    ID - Datum - Produkt - Wert
    1123 -1.1.2013 - 1 - 10
    ...
    Diese werte will ich jetzt natürlich auch durch die Rekursion berechnen lassen. für die unsterste Ebene klappt das ohne probleme mit Sum, aber die ebene darüber, also die Vorgänger, die werden nicht summiert, sonder es steht immer NULL anstatt der erwarteten Summe.

    Was tun, sprach Zeus? Nein, ich will möglichst nicht die Summierung in der Rekursion machen, sondern wirklich nachher, um hier ggf. weiter filtern zu können (beispielsweise nach Datum).

    Danke und ein schönes Adventswochenende
    Michael

  • #2
    Was Du hier nicht schreibst, ist der Aufbau Deines Statements, das die Summierung der Blattwerte enthält.
    Also mal geraten:
    Dein Join aus der Ebenen (Knoten) Tabelle mit der Wertetabelle liefert tatsächlich nur die Blätter. Für höhere Ebenen, gibt es keine passenden WerteTabelleneinträge. Also wird auch nichts summiert.
    Ich kenne die MSSQL Rekursion Syntax nicht und Dein bisheriges Statement nicht, vielleicht tut es schon ein Outer Join zwischen Knoten und Blättern.
    Gruß, defo

    Comment


    • #3
      Erstmal danke für den Tipp mit dem Outer Join, werde in die richtung mal weiter testen. Wenn du oder wer anders noch eine Idee haben sollte, wäre ich natürlich nicht abgeneigt. Hier auch mal mein Statement welches ich bisher benutze. Danke

      Code:
      select rek.ID,rek.Bez,rek.Ebene,rek.Vor,rek.Tiefe, sum(distinct Daten.Wert) as Anzahl
      from dbo.tbl_Rekursion as RK, rekursion as rek 
      left join  dbo.tbl_Daten as Daten on rek.Vor=Daten.ID
      where rek.id=RK.Vor_ID and RK.id=1
      group by rek.ID,rek.Bez,rek.Ebene,rek.Vor,rek.Tiefe
      Edit: Das Group By im Statement vergessen.

      Comment


      • #4
        Gibt es hier vielleicht noch ein paar Tipps? Wäre dankbar, weil ich kommen im Moment nicht weiter. Danke.

        Comment


        • #5
          Originally posted by MichaelW View Post
          Gibt es hier vielleicht noch ein paar Tipps? Wäre dankbar, weil ich kommen im Moment nicht weiter. Danke.
          Ähm, suchst Du eine leckere Kaffeesorte? Da könnte ich dir Tipps geben. Oder auch was die Gesundheit angeht..


          Also mal ernst, mit "..das ist mein Statement was ich nutze, gibt es noch weitere Tipps.." kommt niemand weiter. Bzw. mit der gesamten Aussage Deines vorigen Beitrages. "werde ich mal ausprobieren.." usw.

          Wie ist der Status Quo, was ist das Ziel?

          Je konkreter die Frage, desto eher erhälst Du eine Antwort.
          Gruß, defo

          Comment


          • #6
            Ich bin einfach immer noch bei meinem Ausgangsproblem. Das mit den Outer Joins hat nicht funktioniert (vielleicht kann ich das auch nicht ). Vielleicht brauche ich da einfach noch einen Augenöffner, wie mein Problem mit Werten an den knoten noch zu lösen ist. Danke

            Comment

            Working...
            X