Announcement

Collapse
No announcement yet.

Problem mit Abfrage

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

  • Problem mit Abfrage

    Hallo zusammen,
    ich hab da ein Problem: in einer Tabelle gibt es 3 Spalten:
    lfd.Nr
    Beleg_vor
    Beleg_nach (Laufende Nummer, Vorgängerbeleg und Nachfolgerbeleg).

    Beispiel:
    lfdNr | Beleg_vor | Beleg_nach
    00110 | -1 | 2234
    00117 | 2234 | 2298

    der Beleg 2234 hat also keinen Vorgänger und sein Nachfolger ist 2298.

    Aber nicht jeder Beleg hat einen Nachfolger. Jetzt muß ich eine Abfrage schreiben die mir alle Belege ausgibt die keinen Nachfolger hat. Ich komm da auf keinen grünen Zweig. Wer kann mir da helfen ?

    mfg Stephan

  • #2
    Schick, du hast zwar angegeben, wie ein Datensatz aussieht, der keinen Vorgänger hat (-1), aber nicht, wie ein Datensatz aussieht, der keinen Nachfolger hat.

    der Beleg 2234 hat also keinen Vorgänger und sein Nachfolger ist 2298.
    Auf welchen Datensatz bezieht sich diese Aussage?

    Ich würde die Tabelle ja interpretieren:

    Beleg 110 hat keinen Vorgänger und Beleg 2234 als Nachfolger
    Beleg 117 hat Beleg 2234 als Vorgänger und Beleg 2298n als Nachfolger
    Christian

    Comment


    • #3
      die 110 bzw. 117 ist nur eine laufende Nummer, können wir eigentlich auch streichen.
      Der Beleg 2234 ist ein Angebot und hat keinen Vorgänger, irgendwann wird aus dem Angebot ein Auftrag, und der Auftrag hat die Nummer 2298.

      lfdNr | Beleg_vor | Beleg_nach
      00110 | -1 | 2234
      00117 | 2234 | 2298
      00129 | -1 | 2549

      Beleg 2549 ist ein Angebot, hat keine Vorgänger und keinen Nachfolger.

      Mein Abfrageerbnis soll also sein: 00129|-1|2549

      Comment


      • #4
        Hallo Stephan,

        am später Abend ein schneller Schuß ins Blaue:
        Ein Self-Join (Outer) über die Belegnummer mit Prüfung, ob der Nachfolger NULL ist, also nicht existiert:
        [highlight=SQL]SELECT NACH.*
        FROM Tabelle AS NACH
        LEFT JOIN Tabelle AS VOR
        ON VOR.Beleg_vor = NACH.Beleg_nach
        WHERE VOR.Beleg_nach IS NULL[/highlight]
        Wahrscheinlich habe ich (oder Du?) NACH und VOR verwechselt; einfach mal probieren!
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          hi Olaf

          da passt irgendwas nicht. Er spuckt immer nie die Belege ohne Nachfolger aus, habe glaube ich so ziehmlich alle Varianten deiner Idee durchgespielt. Hast du noch eine Idee, oder wärst so nett es nochmal zu prüfen ?

          mfg Stephan

          Comment


          • #6
            Originally posted by Stephan_80 View Post
            hi Olaf

            da passt irgendwas nicht. Er spuckt immer nie die Belege ohne Nachfolger aus, habe glaube ich so ziehmlich alle Varianten deiner Idee durchgespielt.
            mfg Stephan
            so auch?
            [HIGHLIGHT="SQL"]CREATE TABLE Tabelle ( lfdNr INT , Beleg_vor INT, Beleg_nach INT);
            INSERT INTO Tabelle VALUES (00110, -1 , 2234);
            INSERT INTO Tabelle VALUES (00117, 2234, 2298);
            INSERT INTO Tabelle VALUES (00129, -1, 2549);

            SELECT Nach.*
            FROM Tabelle AS Nach
            LEFT JOIN Tabelle AS VOR ON VOR.Beleg_vor = Nach.Beleg_nach
            WHERE VOR.Beleg_nach IS NULL
            AND Nach.Beleg_vor = -1;
            DROP Table Tabelle;
            -- ergibt:
            --lfdNr Beleg_vor Beleg_nach
            ------------- ----------- -----------
            --129 -1 2549
            [/HIGHLIGHT]

            Comment


            • #7
              Bei der Variante kommt nichts raus, kein Ergebnis. Die Abfrage von Olaf ergibt ne Riesenliste mit von Vorgängern mit Nachfolgern, die dann auf ohne Vorgänger gefiltert wird. geht nicht :-(

              Comment


              • #8
                Hallo Stephan,
                da passt irgendwas nicht
                Den Eindruck habe ich auch. Wenn ich mein Script ausführe, kommt
                [highlight=code]
                lfdNr Beleg_vor Beleg_nach
                ----------- ----------- -----------
                117 2234 2298
                129 -1 2549
                [/highlight]und das stimmt auch; die lfdNr 117 hat in den paar Mini-Daten ja auch keinen Nachfolger.
                Und das Script von ebis funktioniert auch.

                Wenn es bei Dir nicht funktioniert, könnte es evtl. daran liegen, das Deine Echt-Daten etwas anders sind, als Deine Beispiel-Daten hier.
                Olaf Helper

                <Blog> <Xing>
                * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                Comment


                • #9
                  und das stimmt auch; die lfdNr 117 hat in den paar Mini-Daten ja auch keinen Nachfolger.
                  Nicht das du das verwechselst -> Beitrag 2 & 3

                  Dein Ergebnis gibt 117 mit aus. Das ist nicht gewünscht, denn 2234 hat einen Nachfolger, eben 2298.

                  Suche alle Vorgänge, die mit einem Datensatz "-1,Vorgang" angelegbt wurden, aber zu denen ein Datensatz "Vorgang, anderer Vorgang" nicht existiert
                  Christian

                  Comment

                  Working...
                  X