Announcement

Collapse
No announcement yet.

Full Outer Join Problem

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

  • Full Outer Join Problem

    Hallo liebe Uuser,

    ich habe folgendes Problem, wäre super, wenn ihr mir da weiterhelfen könntet:

    Ich habe zwei Tabellen
    - Wertetabelle (Jahr und Monat, aber nicht Lückenlos, sprich für Jahr 2010 gibt es
    die Monate Sep. - Dez.)
    - Geschäftsjahrestabelle ( hier werden die Geschäftsjahre und die 12 Monate hinterlegt.

    Jetzt ist es so, ich möchte die beiden Tabellen zusammenführen, überkreuzen, so dass mir eine Lückenlose Tabelle zur Verfügung steht. Zb. trotzdem für das Jahr 2010 alle Monate aufgeführt werden, aber im Betrag dann, für den kein Monat angelegt ist, eine Null eingetragen wird.

    Habt ihr da eine Lösung?

    Gruss

  • #2
    [HIGHLIGHT="SQL"]SELECT *
    FROM Geschäftsjahrestabelle G
    LEFT JOIN Wertetabelle W ON W.Monat = G.Monat[/HIGHLIGHT]

    Comment


    • #3
      Schon versucht, aber....

      Das hab ich versucht, aber leider werden mir dort nur die Werte geliefert, die mit meinem ON übereinstimmen, sprich die Monate, die auch in meiner Wertetabelle vorkommen. Das ist das der ....!

      Keine Ahnung, woran das liegt. Ich möchte halt 12 Monate angezeigt bekommen und nicht nur die drei letzten, die in der Wertetabelle stehen. Nämlich in meiner Geschäftsjahrestabelle sind für das Jahr 2010, alle Monate hinterlegt.

      Komisch, oder?

      Comment


      • #4
        Musst das halt richtig machen...
        [HIGHLIGHT="SQL"]WITH Monate (Monat)AS
        ( SELECT 1 UNION ALL
        SELECT 2 UNION ALL
        SELECT 3
        )
        , Werte (Wert, Monat) AS
        ( SELECT 5, 1 UNION ALL
        SELECT 4, 3
        )
        SELECT G.Monat AS Monat
        , W.Wert AS Wert
        FROM Monate AS G
        LEFT JOIN Werte AS W ON G.Monat = W.Monat

        -- Monat Wert
        ------------- -----------
        -- 1 5
        -- 2 NULL
        -- 3 4[/HIGHLIGHT]

        Comment


        • #5
          Sieht gut aus, aber noch eine Frage ....

          In der Geschäftsjahrestabelle liegen Jahr mehrere Jahre mit dazugehörigen Monaten.
          In der Wertetabelle liegen auch Werte eben über mehrere Jahre, aber eben nicht Lückenlos.

          Beide Tabellen sind über Firma/Werk miteinandere referenziert.

          Geht das irgendwie auch so? Ich versteh es nicht ganz.

          Gruss und dankeschön.

          Comment


          • #6
            Hallo,
            Originally posted by Vasquez155 View Post
            ...Keine Ahnung, woran das liegt.
            Das liegt wohl daran, dass du
            a) keinen OUTER Join verwendest oder
            b) in der Where-Klausel mit weiteren Bedingungen den OUTER-Join zunichte machst.

            Also zeig ein bisschen Code und wir werden dir genau sagen können woran es liegt.

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Oke. Dankeschön.

              Dankeschön vorab.

              Hier wäre das Statement.

              Gruss
              Attached Files

              Comment


              • #8
                Halt doch so machen, wie ichs geschrieben habe...

                [HIGHLIGHT="SQL"]SELECT
                f.Firma
                , f.Standort
                , f.Bankkonto
                , f.Standortkonto
                , f.Buchjahr
                , f.Buchonat
                , d.Firma
                , d.Standort
                , d.Geschaeftsjahr
                , d.Geschaeftsmonat
                , f.Zahlschluessel
                , f.Status
                , nvl(f.Saldovortrag + f.Soll - f.Haben,0.0)
                FROM d_tbl_Geschaeftsjahr d
                LEFT JOIN f_tbl_Werte f ON f.firma = d.firma
                and f.Standort = d.standort
                and f.Buchjahr || f.buchmonat = d.Geschaeftsjahr || d.Geschaeftsmonat[/HIGHLIGHT]

                Also mit der vollständigen Tabelle beginnen und darauf die Tabelle mit den Lücken Outer-Joinen

                (das mit dem Union und Right-JOIN ist nur Zeitverschwendung)

                Comment


                • #9
                  Dankeschön, doch leider ....

                  Leider bekomme ich aber nicht das gewünschte Ergebnis.

                  Mir werden immernoch nur die Jahr/Monate angezeigt, die in beiden identisch sind. Die Monate zum zugehörigen Jahr, die keine Werte haben, werden nicht angezeigt.

                  Woran kann das denn eig liegen? So wie "du/sie" mir das Statement geschrieben hast, hab ich es auch schon versucht. Daher dachte ich, ich müsste es mit einem "Full outer join" probieren.

                  Gruss

                  Comment


                  • #10
                    Originally posted by Vasquez155 View Post
                    ...Woran kann das denn eig liegen?
                    Wie bereits gesagt:
                    Originally posted by Falk Prüfer View Post
                    ...Das liegt wohl daran, dass du
                    a) keinen OUTER Join verwendest oder
                    b) in der Where-Klausel mit weiteren Bedingungen den OUTER-Join zunichte machst.
                    Originally posted by Vasquez155 View Post
                    Leider bekomme ich aber nicht das gewünschte Ergebnis.

                    Mir werden immernoch nur die Jahr/Monate angezeigt, die in beiden identisch sind. Die Monate zum zugehörigen Jahr, die keine Werte haben, werden nicht angezeigt.
                    Siehe oben! Hast du das Statement von ebis EXAKT so ausprobiert und mit welchem Ergebnis? Und über welches DBMS reden wir überhaupt?

                    Gruß Falk
                    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                    Comment


                    • #11
                      Es kommen die Werte vor....

                      die in beiden Tabellen vorkommen.

                      D.h., es werden mir die Datensätze eig nur angezeigt, die auch wirklich nur in meiner Wertetabelle stehen. Trotzdem liegen in der Geschäftsjahrestabelle für das Jahr z.b. 2010 alle 12 Monate vor. Angezeigt werden aber nur 4 Monate, in denen auch wirklich Werte stehen.

                      Ich weiß einfach nicht, woran das liegen könnte. Hab damit eig früher und davor nie Probleme gehabt, einen JOIN an anderer Stelle asuzuführen.

                      Gruss

                      Comment


                      • #12
                        Wenn ich nach dem left join eine ...

                        Where - Bedingung anfüge, mach ich dann somit eig meinen JOIN kaputt? Ich möchte durch die Where - Bedingung eine Kontrolle auf ein bestimmtes Konto durchführen.

                        Gruss

                        Comment


                        • #13
                          Falls in der Where Bedingung Spalten der outer-gejointen Tabelle stehen, sollte man diese Bedingungen zur ON-Klausel hinzufügen...

                          PS: ... und Statements sollte man schon vollständig posten, von einem WHERE ist in Deinem Anhang nix zu sehen
                          Formatierung von SQl in Beiträgen

                          Comment


                          • #14
                            Hier das Statement:

                            [highlight=sql] SELECT
                            f.Firma
                            , f.Standort
                            , f.Bankkonto
                            , f.Standortkonto
                            , f.Buchjahr
                            , f.Buchonat
                            , d.Firma
                            , d.Standort
                            , d.Geschaeftsjahr
                            , d.Geschaeftsmonat
                            , f.Zahlschluessel
                            , f.Status
                            , nvl(f.Saldovortrag + f.Soll - f.Haben,0.0)
                            FROM
                            d_tbl_Geschaeftsjahr d
                            LEFT JOIN
                            f_tbl_Werte f ON f.firma = d.firma and
                            f.Standort = d.standort and
                            f.Buchjahr || f.buchmonat = d.Geschaeftsjahr || d.Geschaeftsmonat

                            where (f.Zahlschlüssel = ' ' and d.Status = 'A')
                            or (f.Zahlschlüssel = ' ' and d.Status = 'B')


                            Möchte folgendes Ergebnis:

                            Firma Standort BuchJahr BMonat Wert GJ GMonat
                            A 1 NULL NULL NULL/0 2010 1
                            A 1 NULL NULL NULL/0 2010 2
                            A 1 NULL NULL Null 2010 3
                            A 1 NULL NULL Null 2010 4
                            A 1 2010 5 5378547 2010 5
                            A 1 NULL NULL Null 2010 6
                            A 1 NULL NULL Null 2010 7
                            A 1 2010 8 5747 2010 8
                            A 1 NULL NULL Null 2010 9
                            A 1 NULL NULL Null 2010 10
                            A 1 2010 11 7832 2010 11
                            A 1 2010 12 68292 2010 12 [/highlight]

                            Comment


                            • #15
                              Originally posted by Vasquez155 View Post
                              ...Ich weiß einfach nicht, woran das liegen könnte.
                              Auch wenn du das noch so oft wiederholst, die Antwort wird trotzdem keine Andere!
                              Originally posted by Falk Prüfer View Post
                              Das liegt wohl daran, dass du
                              a) keinen OUTER Join verwendest oder
                              b) in der Where-Klausel mit weiteren Bedingungen den OUTER-Join zunichte machst.
                              siehe b)!!!
                              Originally posted by Vasquez155 View Post
                              Where - Bedingung anfüge, mach ich dann somit eig meinen JOIN kaputt?
                              Ja, wie oft denn noch! Siehe b)

                              Und siehe:
                              Originally posted by ebis View Post
                              Falls in der Where Bedingung Spalten der outer-gejointen Tabelle stehen, sollte man diese Bedingungen zur ON-Klausel hinzufügen...
                              Gruß Falk

                              P.S.: Liest du eigentlich die Antworten auf deine Fragen...
                              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                              Comment

                              Working...
                              X