ARIE: SQL-Anweisung geht nicht:-(

Hallo Leute,
ich habe ein Problem und zwar die SQL bringt mir eine Fehlermeldung
"kein Group by" :-((((
hier meine SQL:

select VORGABE_GRUPPE.GRUPPE,VORGABE_GRUPPE.BEZEICHNUNG,
       TO_CHAR(BRUTTOLOHN.DATUM,'DDMMYY')DATUM,
    MITARBEITER.PERSONALNUMMER,MITARBEITER.NAME,MITARBEITER.STAMMKST,
       SUM(ZEIT.STUNDEN)
from   VORGABE_GRUPPE,BRUTTOLOHN,MITARBEITER,ZEIT
WHERE  VORGABE_GRUPPE.GRUPPE=BRUTTOLOHN.LGRUPPE
AND    ZEIT.STAMMGRUPPE=BRUTTOLOHN.LGRUPPE
AND    VORGABE_GRUPPE.GRUPPE='080'
AND    MITARBEITER.PERSONALNUMMER=ZEIT.PERSONALNUMMER
GROUP BY VORGABE_GRUPPE.GRUPPE,MITARBEITER.PERSONALNUMMER
FEHLER in Zeile 1:
ORA-00979: kein GROUP BY-Ausdruck

  1. Hi Arie

    ich habe ein Problem und zwar die SQL bringt mir eine Fehlermeldung
    "kein Group by" :-((((

    http://aktuell.de.selfhtml.org/tippstricks/datenbanken/having/index.htm
    Sämtliche nicht nach Group By aufgeführten Felder, müssen eine Aggregationsfunktion
    benutzen.

    hier meine SQL:

    select VORGABE_GRUPPE.GRUPPE,VORGABE_GRUPPE.BEZEICHNUNG,
           TO_CHAR(BRUTTOLOHN.DATUM,'DDMMYY')DATUM,
        MITARBEITER.PERSONALNUMMER,MITARBEITER.NAME,MITARBEITER.STAMMKST,
           SUM(ZEIT.STUNDEN)

    GROUP BY VORGABE_GRUPPE.GRUPPE,MITARBEITER.PERSONALNUMMER

    2 im Group By, 6 ohne Aggregatsfunktion im Select.

    Gruss Daniela

    1. Hi Daniela

      hier meine SQL:

      select VORGABE_GRUPPE.GRUPPE,VORGABE_GRUPPE.BEZEICHNUNG,
             TO_CHAR(BRUTTOLOHN.DATUM,'DDMMYY')DATUM,
          MITARBEITER.PERSONALNUMMER,MITARBEITER.NAME,MITARBEITER.STAMMKST,
             SUM(ZEIT.STUNDEN)

      GROUP BY VORGABE_GRUPPE.GRUPPE,MITARBEITER.PERSONALNUMMER

      2 im Group By, 6 ohne Aggregatsfunktion im Select.

      und was heißt das jetzt??sorry bin Anfänger:-(

      Grüße Arie

      1. Hallo Arie,

        select VORGABE_GRUPPE.GRUPPE,VORGABE_GRUPPE.BEZEICHNUNG,
               TO_CHAR(BRUTTOLOHN.DATUM,'DDMMYY')DATUM,

        MITARBEITER.PERSONALNUMMER,MITARBEITER.NAME,MITARBEITER.STAMMKST,

        SUM(ZEIT.STUNDEN)

        GROUP BY VORGABE_GRUPPE.GRUPPE,MITARBEITER.PERSONALNUMMER

        2 im Group By, 6 ohne Aggregatsfunktion im Select.

        und was heißt das jetzt??sorry bin Anfänger:-(

        Die Spalten
            VORGABE_GRUPPE.BEZEICHNUNG,
            TO_CHAR(BRUTTOLOHN.DATUM,'DDMMYY')DATUM,
            MITARBEITER.NAME,
            MITARBEITER.STAMMKST,
        weisen keine Aggregatsfunktion wie z.B:
            SUM(ZEIT.STUNDEN)
        auf
        und tauchen auch nicht in GROUP BY auf

        Gruss,

        Vinzenz

      2. Hi Arie

        und was heißt das jetzt??sorry bin Anfänger:-(

        Ganz genau deswegen stand der Link da, da hab ich es einmal
        beschrieben wie und warum es so ist damit ich nicht jedesmal
        lange Erklärungstexte schreiben muss sondern einfach Linken
        kann.

        Gruss Daniela

        1. Hallo Daniela!

          Dieses Problem war mir gar nicht bewußt ;-)
          Aber was mache ich, wenn ich 2 Tabellen habe:

          Bestellungen
           artikel
           kunden_id
           preis

          Kunden
           kunden_id
           name

          Wenn ich jetzt mit GROUP BY für alle Kunden die Summen Ihrer Bestelluneg auflisten will, aber gleichzeitig die Namen mit der Abfrage mit auslesen möchte, also

          SELECT
            Kunden.name,
            sum(Bestellungen.preis) AS summe
          FROM
            Bestellungen
          LEFT JOIN
            Kunden
          ON
            Bestellungen.kunden_id = Kunden.kunden_id
          GROUP BY
            Bestellungen.kunden_id

          Das geht zwar in MySQL, aber wohl nicht überall. Müßte ich dann Kunden.name mit in GROUP BY aufnehemnb oder was?

          SELECT
            Kunden.name,
            sum(Bestellungen.preis) AS summe
          FROM
            Bestellungen
          LEFT JOIN
            Kunden
          ON
            Bestellungen.kunden_id = Kunden.kunden_id
          GROUP BY
            Bestellungen.kunden_id,
            Kunden.name

          oder wie macht man das?

          Grüße
          Andreas

          1. Hi Andreas

            SELECT
              Kunden.name,
              sum(Bestellungen.preis) AS summe
            FROM
              Bestellungen
            LEFT JOIN
              Kunden
            ON
              Bestellungen.kunden_id = Kunden.kunden_id
            GROUP BY
              Bestellungen.kunden_id,
              Kunden.name

            oder wie macht man das?

            Ja, genau so, macht ja auch keinen Unterschied da eine
            kunden_id nur ein Name haben kann. Bei einigen RDBMS
            wird die kunden_id auch noch in den Select hoch müssen.

            Gruss Daniela

      3. Lösung mit Performanc optimierung (wenn die Schlüssel und Indexe richtig gesetzt sind):

        SELECT

        VORGABE_GRUPPE.GRUPPE,
        VORGABE_GRUPPE.BEZEICHNUNG,
        TO_CHAR(BRUTTOLOHN.DATUM,'DDMMYY') AS DATUM,
        MITARBEITER.PERSONALNUMMER,
        MITARBEITER.NAME,
        MITARBEITER.STAMMKST,
        SUM(ZEIT.STUNDEN)

        FROM VORGABE_GRUPPE
        INNER JOIN BRUTTOLOHN ON VORGABE_GRUPPE.GRUPPE = BRUTTOLOHN.LGRUPPE
        INNER JOIN ZEIT ON ZEIT.STAMMGRUPPE = BRUTTOLOHN.LGRUPPE
        INNER JOIN MITARBEITER ON MITARBEITER.PERSONALNUMMER = ZEIT.PERSONALNUMMER

        WHERE VORGABE_GRUPPE.GRUPPE = '080'

        GROUP BY

        VORGABE_GRUPPE.GRUPPE,
        VORGABE_GRUPPE.BEZEICHNUNG,
        MITARBEITER.PERSONALNUMMER,
        MITARBEITER.NAME,
        MITARBEITER.STAMMKST

        Allerdings würde noch fehler auftreten wenn MITARBEITER.STAMMKST ein Bit fällt ist.

        MfG Arndt