nilsfad: Anzahl d. Referenzen auf Spalten in anderer Tabelle "zählen"

Hallo

folgendes "Problem":
Ich habe zwei Tabellen, Meldung und Vorgang. Beide mit einer PrimaryKey Id. Darüberhinaus besitzt die Tabelle Meldung noch eine Spalte IdVorgang, mit der genau EINEM Vorgang mehrere Meldungen zugeordnet werden können.
Ich möchte meine SQL Abfrage nun so gestallten, dass mir nicht nur
der Komplette Inhalt der Tabelle Vorgang ausgegegben wird, sondern
dass für jeden Datensatz noch ein extra Feld dabei ist in dem steht,
wie viele Meldungen auf diesen Vorgang zeigen.

Ich habe es versucht mit:
SELECT Vorgang.Beschreibung, COUNT(Meldung.IdMeldung) AS Anzahl FROM Vorgang, Meldung WHERE Vorgang.IdVorgang = Meldung.IdVorgang

Immer erhalte ich jedoch folgenden Fehler:
"Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] Sie wollten eine Abfrage ausführen, die den angegebenen Ausdruck 'Beschreibung' nicht als Teil der Aggregatfunktion einschließt." (Arbeite mit MS Access)

Daraufhin habe ich den COUNT-Teil entfernt und gesehen, dass unter Einbeziehung der Tabelle Meldung in die Abfrage auch diejenigen Vorgänge nicht angezeigt werden, auf die garkeine Meldung verweist. Das ist ein weiteres "Problem".

Kennt sich vielleicht ein "Profi" hier mehr aus als ich?

  1. Hi !

    SELECT Vorgang.Beschreibung, COUNT(Meldung.IdMeldung) AS Anzahl FROM Vorgang, Meldung WHERE Vorgang.IdVorgang = Meldung.IdVorgang

    Wenn Du hinten noch ein "group by Vorgang.Beschreibung" anhängst, müsste es funktionieren.

    Gruß

    Hans

    1. Nunja, das schafft leider noch keine Abhilfe, denn ich will ja mehr Spalten als nur "Beschreibung" aus der Tabelle vorgang auslesen. Die von dir vorgeschlagene Lösung führt zur nächsten "Fehlermeldung":
      Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
      [Microsoft][ODBC Microsoft Access Driver] Sie wollten eine Abfrage ausführen, die den angegebenen Ausdruck 'Status' nicht als Teil der Aggregatfunktion einschließt.

      Soll ich da jetzt jede einzelne Spalte in einer GROUP BY Klausel anhängen? Was bewirkt das überhaupt?

      Wenn Du hinten noch ein "group by Vorgang.Beschreibung" anhängst, müsste es funktionieren.

      Gruß

      Hans

      1. Hi nilsfad,

        also, erstens kann ich nicht riechen, was Du für Spalten holen willst.
        zweitens.

        Annahme folgende Tabelle

        Name              Hand           Finger
        -----------------------------------------
        Hans              links           1
        Hans              links           1
        Hans              links           1
        Hans              links           1
        Hans              links           1
        Hans              rechts          1
        Hans              rechts          1
        Hans              rechts          1
        Hans              rechts          1
        Hans              rechts          1
        Klaus             links           1
        Klaus             links           1
        ...
        Peter             rechts          1
        Peter             rechts          1
        Peter             rechts          1

        So, bei

        select count(Finger) from Tabelle ist das Ergebnis 30
        Wenn Du nun wissen willst, wieviele Finger jeder hat, mußt Du Name als Bezug für den count angeben

        select name, count(finger) from Tabelle group by name. Ergebnis: Hans, Klaus und Peter haben jeweils 10 Finger

        Wenn Du wissen willst, an welcher Hand jeder wieviele Finger hat, dann

        select name, arm, count(finger) from Tabelle group by name, arm.

        Jetzt kommen also zuerst die Namen, dann die Hände und dann die Anzahl der Finger bezogen auf Name und Hand. Jeder hat also 5 Finger an jeder Hand.

        Ich hoffe, das group by ist jetzt verständlich.

        Gruß

        Hans

        1. Ah Danke jetzt wirds etwas klarer. Deinen Anweisungen entsprechend habe ich meine SELECT-Abfrage nun angepasst und damit wird für jeden Vorgang die Anzahl der auf diesen Vorgang referenzierenden Meldungen gezählt.

          Ein "Problem" bleibt aber noch, und zwar fehlen jene Vorgänge in der Ergebnismenge, denen keine Meldungen zugeordnet sind. Wie kann man da abhilfe schaffen?

          1. Hi !

            Ein "Problem" bleibt aber noch, und zwar fehlen jene Vorgänge in der Ergebnismenge, denen keine Meldungen zugeordnet sind. Wie kann man da abhilfe schaffen?

            Wie soll das auch gehen? Du machst eine Abfrage, bei der die Vorgangs-ID in der Meldungen-Tabelle vorkommen soll. Wenn also in der Meldungen-Tabelle keine Vorgangs-ID vorkommt, kann auch kein Ergebnis geliefert werden.

            Gruß

            Hans