Announcement

Collapse
No announcement yet.

In Access SQL-Abfrage

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

  • In Access SQL-Abfrage

    Hi Leute,

    ich schreibe zum ersten mal in euer Forum, aber was ich bei meiner seit Stunden andauernden Suche sah, vermittelte mir doch einen sehr positiven Eindruck.

    Mein Problem ist, das ich eine Tabelle in einer Datenbank haben mit 16 Spalten pro Datensatz. Das ganze habe ich aus Excel importier und muss nun dauerhaft filtern aus den 200.000 Datensätzen. Der Primärschlüssel würde sich, um den Datensatz eindeutig zu machen aus den Spalten (Beleg-Nr. (text); Zeilen-Nr.(zahl); Version(zahl)) ergeben. Das ganze ist eine Kundenbestellung und jedes mal wenn dort etwas geändert wurde wird eine neue Version hinterlegt.

    Ich habe nun zum Beipiel eine Bestellung mit 4 Positionen (Datensätzen) die es in 12 Versionen gibt, das heißt 48 Datensätze. Nun will ich eine Abfrage machen, die mir alle Positionen einer Bestellung in der Endversion raussucht. Ich habe es mit der max und group by via sql versucht bin aber gescheitert.

    Beleg-Nr.|Zeilen-Nr. | Datum | Version | Artikel | Stück
    AB04/04 | 20800 | 15.12.2005 | 1 | 23V013 | 70
    AB04/04 | 21000 | 15.12.2005 | 1 | 23V014 | 50
    AB04/04 | 20800 | 12.01.2006 | 2 | 23V013 | 70
    AB04/04 | 21000 | 13.01.2006 | 2 | 23V014 | 50
    AB04/04 | 20800 | 18.01.2006 | 3 | 23V013 | 70
    AB04/04 | 21000 | 19.01.2006 | 3 | 23V014 | 50

    Das war das Beispiel und hier möchte ich am Ende der Abfrage nur die Bestellposition mit der höchsten Version haben. Ich wäre euch echt sehr Dankbar wenn ihr mir helfen könnt!

    Allerbeste Grüße
    Red

    Ps.: ich möchte nicht löschen!
    PPs.: falls ich das Thema falsch platziert haben sollte, SORRY!

  • #2
    Hallo,

    mal hiervon was probiert? Bei "doppelten" Datensätzen nur einen anzeigen

    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


    • #3
      Vorschlag speziell für Access:

      1. Baue eine GroupBy - Abfrage, die nur Belegnummer und Max(Version) liefert.

      2. Verknüpfe (INNER JOIN) diese Abfrage in einer 2. Abfrage mit der Originaltabelle (Belegnr, Version)

      Grüße
      Tino
      Ich habs gleich!
      ... sagte der Programmierer.

      Comment


      • #4
        Originally posted by tinof View Post
        Vorschlag speziell für Access:

        1. Baue eine GroupBy - Abfrage, die nur Belegnummer und Max(Version) liefert.

        2. Verknüpfe (INNER JOIN) diese Abfrage in einer 2. Abfrage mit der Originaltabelle (Belegnr, Version)

        Grüße
        Tino
        Hi Tino,

        Danke für die schnelle Antwort! Aber was mache ich mit der Zeilen-Nr. die muss auch zwingend drin sein. Um das Problem noch genauer darzustellen. Die Beleg-Nr. ist eigentlich nur die Nummer für das Jahr, Daten sind von 2005 bis 2010, dann die Zeilen-Nr. die den Auftrag im Jahr eindeutig kennzeichnet, dann gibt es noch eine interne Positionsnummer, die hatte ich hier aber außen vor gelassen und am ende dann die aktuelleste Version.

        @ Falk - Auch dir Danke für die schnelle Antwort, die Sachen habe ich noch nicht versucht, mach ich aber im laufe des Tages, hoffe ich stell mich nicht zu glatt an!

        Comment


        • #5
          Originally posted by RedDevil View Post
          Aber was mache ich mit der Zeilen-Nr. die muss auch zwingend drin sein.
          Die nimmst du auch mit in die GroupBy - Klausel, also Belegnummer, Zeilennummer und Max(Version).
          In der 2. Abfrage werden dann 3 Felder verknüpft.

          Grüße
          Tino

          P.S. "Glatt" hab' ich seit EK88/01 nicht mehr in diesem Zusammenhang gehört, cool!
          Ich habs gleich!
          ... sagte der Programmierer.

          Comment


          • #6
            SELECT
            [5_Kundenbestellungsstrukturdaten].[Beleg-Nr], [5_Kundenbestellungsstrukturdaten].Zeilennr, [5_Kundenbestellungsstrukturdaten].Positonsnummer, [5_Kundenbestellungsstrukturdaten].Version

            FROM 5_Kundenbestellungsstrukturdaten

            GROUP BY
            [5_Kundenbestellungsstrukturdaten].[Beleg-Nr], [5_Kundenbestellungsstrukturdaten].Zeilennr, [5_Kundenbestellungsstrukturdaten].Positonsnummer, [5_Kundenbestellungsstrukturdaten].Version;

            Kann ich nicht hier schon die max() auf die version beziehen? dann würde es doch funktionieren oder? also die Sortierung paßt, jetzt müßten nur noch die Datensätze raus die kleiner als die version davor sind

            hier noch als Hinweis, darum hat es mit Falks idee nicht so geklappt, ich habe in jeder Spalte mehrfach Dopplungen, nur zusammen erhalte ich hier eine Eindeutigkeit
            Zuletzt editiert von RedDevil; 14.06.2011, 18:45.

            Comment

            Working...
            X