Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Aggregatsfunktion und zusätzliche Spalten darstellen...

Dieses Thema im Forum "Microsoft Access" wurde erstellt von ansim, 4 September 2012.

  1. ansim

    ansim Benutzer

    Hallo!
    Mein Access-Problem ist Folgendes:
    Aus einer Tabelle mit vielen Mehrfacheinträgen, die sich nur durch ein anderes Datum unterscheiden [STANDdat], suche ich mit einer Abfrage die mit dem jüngsten Datum heraus. Hier die Abfrage:
    Code:
    SELECT [Abfrage].NAME, [Abfrage].T, [Abfrage].NUMMER, Max([Abfrage].STANDdat) AS MaxvonSTANDdat
    FROM [Abfrage]
    WHERE ([Abfrage].MASZSTAB)=100000
    GROUP BY [Abfrage].NAME, [Abfrage].T, [Abfrage].NUMMER
    ORDER BY [Abfrage].NAME, [Abfrage].T;
    Das funktioniert auch prima!
    Jetzt möchte ich aber zusätzlich noch das Feld [Abfrage].Auftragsnummer ausgeben.
    Doch sobald ich das bei SELECT angebe, wird auch danach gruppiert und ich erhalte in der Ausgabe ALLE Datensätze - weil ja keine doppelten Auftragsnummer. vorhanden sind.
    Wie stellt man das denn an?
    Schon mal Danke für eure Mühe!!!
    Andreas
     
  2. ukulele

    ukulele Datenbank-Guru

    Auch für das Feld Auftragsnummer musst du dir ein Kriterium überlegen das definiert, welche Auftragsnummer ausgegeben werden soll. Am einfachsten ist hier auch min() max() oder avg() zu benutzen.
    Code:
    SELECT    [Abfrage].NAME,
            [Abfrage].T,
            [Abfrage].NUMMER,
            Max([Abfrage].STANDdat) AS MaxvonSTANDdat,
            Min([Abfrage].Auftragsnummer) AS Auftragsnummer
    FROM [Abfrage]
    WHERE ([Abfrage].MASZSTAB)=100000
    GROUP BY [Abfrage].NAME, [Abfrage].T, [Abfrage].NUMMER
    ORDER BY [Abfrage].NAME, [Abfrage].T;
     
  3. ansim

    ansim Benutzer

    Vielen Dank!!!
    Das klappt hervorragend.
    Manchmal ist alles ganz einfach - wenn man weiß wie...
     
  4. ansim

    ansim Benutzer

    Nein!
    Es ist wohl doch nicht so einfach...
    Ich habe einen Fehler gemacht: Es gibt doch auch gleiche Auftragsnummern
    mit:
    Code:
    Min([Abfrage].Auftragsnummer) AS Auftragsnummer
    
    wird die kleinste Auftragsnummer ausgegeben - das ist aber nicht immer diejenige, die dem jüngsten Bearbeitungsdatum entspricht.
    Also: Ich suche die Einträge heraus, die das jüngste Bearbeitungsdatum haben und genau zu diesen brauche ich diese Auftragsnummer.
    Danke im Vorraus!
    Andreas
     
  5. ukulele

    ukulele Datenbank-Guru

    Geht auf, ich denke mal auf verschiedene Art und Weise. Probier mal das hier:
    Code:
    SELECT    a1.NAME,
            a1.T,
            a1.NUMMER,
            Max(a1.STANDdat) AS MaxvonSTANDdat,
            (    SELECT    Min(a2.Auftragsnummer)
                FROM    [Abfrage] a2
                WHERE    a1.NAME = a2.NAME
                AND        a1.T = a2.T
                AND        a1.NUMMER = a2.NUMMER
                AND        a1.STANDdat = a2.STANDdat ) AS Auftragsnummer
    FROM    [Abfrage] a1
    WHERE    a1.MASZSTAB = 100000
    GROUP BY a1.NAME, a1.T, a1.NUMMER,(    SELECT    Min(a2.Auftragsnummer)
                                        FROM    [Abfrage] a2
                                        WHERE    a1.NAME = a2.NAME
                                        AND        a1.T = a2.T
                                        AND        a1.NUMMER = a2.NUMMER
                                        AND        a1.STANDdat = a2.STANDdat )
    ORDER BY a1.NAME, a1.T
     
  6. ansim

    ansim Benutzer

    Vielen Dank zunächst mal!
    Da tun sich einige Fragen auf:
    a1 ist wohl meine Abfrage [Abfrage]
    Was ist denn a2 für eine Abfrage?
    Eine Kopie von [Abfrage]?

    Wenn ich das so kopiere dann kommt eine Fehlermeldung:
    Syntaxfehler in Abfrageausdruck [Abfrage].Nummer (Select MIN([A2].Auftragsnummer....
    das muss die unterabfrage bei Group by sein.
    Viele Grüße,
    Andreas
     
  7. ukulele

    ukulele Datenbank-Guru

    a1 und a2 sind nur Aliase für die selbe Abfrage. Damit ich in der Unterabfrage auf die andere Zugreifen kann dürfen die Tabellennamen nicht gleich sein. Ich habe ein Komma vergessen, habe es mal korrigiert. Ich hoffe das war der Grund.

    Leider kann man in GROUP BY nicht den Spalten Alias Auftragsnummer verwenden (zumindest bei MSSQL), daher musste ich dort nochmal die komplette Unterabfrage einfügen. In ORDER BY ginge das.
     
  8. ansim

    ansim Benutzer

    Wo hast du denn das Komma reingemacht? Ich kann keinen Unterschied finden.
     
  9. ukulele

    ukulele Datenbank-Guru

    GROUP BY a1.NAME, a1.T, a1.NUMMER,( SELECT Min(a2.Auftragsnummer)

    Ich hoffe, das war auch das Problem.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden