Announcement

Collapse
No announcement yet.

Select mit SUM (ORA-00937) funktioniert nicht

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

  • Select mit SUM (ORA-00937) funktioniert nicht

    Hallo Forum,

    im untenstehenden Select möchte ich gerne die Beträge in einer neuen Spalte (NAME: SummeTotal) summieren. Ich bekomme immer folgende Fehlermeldung, wenn ich SUM(SAMMEL.BETRAG) in das Select einbaue:

    FEHLER: ORA-00937: not a single-group group function
    [highlight=sql]
    SELECT SAMMEL.ART,
    FONDS.WKN WKN,
    FONDS.ISIN ISIN,
    FONDS.WHR WHR,
    FONDS.LAND LAND,
    SAMMEL.STUECKE STUECKE,
    SAMMEL.BETRAG BETRAG,
    SAMMEL.SCHLUSSTAG SCHLUSSTAG,
    SAMMEL.BUCHUNGSTAG BTAG
    FROM MAN_MAN.SAMMEL SAMMEL,
    MAN_MAN.FONDS FONDS
    WHERE SAMMEL.ABRECHNUNGSBETRAGOW <> 0
    AND FONDS.ISIN in ('XXX1','XXX2','XXX3')
    AND SAMMEL.BTAG = arBTAG
    AND (SAMMEL.ART IN ('SKBETEX', 'SKSTTEX') AND arArt='Zugang'
    OR SAMMEL.ART IN ('SVBETEX', 'SVSTTEX') AND arArt='Abgang')
    AND SAMMEL.FONDS_FK = FONDS.FONDS_ID
    ORDER BY 3
    [/highlight]
    Hoffe jemand von euch kann mir weiterhelfen.

    Vielen Dank

    mfg
    Ben
    Zuletzt editiert von ben1984; 29.06.2010, 10:18.

  • #2
    Für Aggregatfunktionen wie Sum(...) müssen alle anderen Spalten als Gruppierungsspalten (Group by ...) definiert sein. Siehe z.B. hier

    Comment


    • #3
      Danke für deine schnelle Antwort.

      Mein Select sieht jetzt so aus:
      [highlight=sql]
      SELECT SAMMEL.ART,
      FONDS.WKN WKN,
      FONDS.ISIN ISIN,
      FONDS.WHR WHR,
      FONDS.LAND LAND,
      SAMMEL.STUECKE STUECKE,
      SAMMEL.BETRAG BETRAG,
      SAMMEL.SCHLUSSTAG SCHLUSSTAG,
      SAMMEL.BUCHUNGSTAG BTAG,
      SUM(SAMMEL.BETRAG) TOTAL
      FROM MAN_MAN.SAMMEL SAMMEL,
      MAN_MAN.FONDS FONDS
      WHERE SAMMEL.ABRECHNUNGSBETRAGOW <> 0
      AND FONDS.ISIN in ('XXX1','XXX2','XXX3')
      AND SAMMEL.BTAG = arBTAG
      AND (SAMMEL.ART IN ('SKBETEX', 'SKSTTEX') AND arArt='Zugang'
      OR SAMMEL.ART IN ('SVBETEX', 'SVSTTEX') AND arArt='Abgang')
      AND SAMMEL.FONDS_FK = FONDS.FONDS_ID
      GROUP BY SAMMEL.ART, FONDS.ISIN, FONDS.WHR, FONDS.LAND, SAMMEL.STUECKE, SAMMEL.BETRAG, SAMMEL.SCHLUSSTAG, SAMMEL.BUCHUNGSTAG
      ORDER BY 3
      [/highlight]
      die Beträge der XX1, XXX2, XXX3, werden aber nicht zusammen addiert.
      WAS mach ich falsch??

      Danke, für eure Hilfe

      Gruß
      Benedikt
      Zuletzt editiert von ben1984; 29.06.2010, 10:19.

      Comment


      • #4
        Fonds.ISIN in der Ausgabe und im Group By, also wird danach auch gruppiert.... und damit nicht summiert

        Comment


        • #5
          versteh ich nicht. sorry

          verstehe nicht was die ISIN jetzt damit zu tun hat.

          Die Werte des Feldes BETRAG sollen ja summiert werden.

          Also aus XXX1 = 1(WERT), XXX2 = 1(WERT), XXX3 = 1(WERT) soll in der Ausgabe später zusammensummiert stehen:

          TOTAL: 3

          hoffe ihr helft mir auf die sprünge;-)

          Comment


          • #6
            mein momentanes ergebnis verkürzt dargestellt:


            WKN || ISIN || Betrag || TOTAL
            555 || XXX1 || 1 ....... || 1
            666 || XXX2 || 1 ....... || 1
            777 || XXX3 || 1 ....... || 1

            Wie gesagt: bei TOTAL müsste 3 stehen.

            die ....... sind Platzhalter damit die Tabelle "schön" aussieht ;-)

            Gruß

            Comment


            • #7
              Hallo,

              ohne aussagekräftige Beispieldaten kann das keiner nachvollziehen. Dann hast du noch einen Syntaxfehler in deinem Select: vor SUM(SAMMEL.BETRAG) TOTAL fehlt ein Komma.

              Und bitte beachten: Formatierung von SQL in Beiträgen

              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


              • #8
                Du willst Feld SAMMEL.BETRAG summieren
                gruppierst aber nach dem Feld SAMMEL.BETRAG (und einigen anderen, z.B Fonds.Isin)
                Da diese aber jeweils unterschiedlich sind, bilden die eine Gruppe, somit kommst Du nicht auf Deine 3

                Comment


                • #9
                  Hallo,

                  Die Daten sind doch eher zweitranging, oder nicht?

                  Also:

                  ISIN = XXX1, BETRAG von ISIN XXX1 = 10,
                  ISIN = XXX2, BETRAG von ISIN XXX2 = 20,
                  ISIN = XXX3, BETRAG von ISIN XXX3 = 30

                  TOTAL müsste dann "60" ausgeben.

                  Comment


                  • #10
                    Originally posted by ebis View Post
                    Du willst Feld SAMMEL.BETRAG summieren
                    gruppierst aber nach dem Feld SAMMEL.BETRAG (und einigen anderen, z.B Fonds.Isin)
                    Da diese aber jeweils unterschiedlich sind, bilden die eine Gruppe, somit kommst Du nicht auf Deine 3
                    Sobald ich aber nicht alle Felder mit in die group by nehme bekomme ich wieder
                    die ORA Fehlermeldung: ORA-00937: not a single-group group function

                    Könnt ihr mir ein Beispiel anhand meines Selects geben?

                    Grüße

                    Comment


                    • #11
                      Originally posted by ben1984 View Post
                      Sobald ich aber nicht alle Felder mit in die group by nehme bekomme ich wieder
                      die ORA Fehlermeldung: ORA-00937: not a single-group group function
                      Du darfst die Felder nicht nur aus dem GROUP BY entfernen, sondern auch aus dem SELECT!

                      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


                      • #12
                        Hallo,

                        aber ich brauch die anderen Felder auch. Will eine View erstellen.

                        Geht das nicht mit dem Summieren in einer Abfrage?


                        in einer zweiten Abfrage bekomme ich die Summe ausgegeben
                        [highlight=sql]
                        SELECT 'Zugaenge' FLUSS,
                        sum(SAMMEL.ABRECHNUNGSBETRAGOW) BETRAG
                        FROM MAN_MAN.SAMMEL SAMMEL,
                        MAN_MAN.FONDS FONDS
                        WHERE SAMMEL.ABRECHNUNGSBETRAGOW <> 0
                        AND FONDS.ISIN IN ('XXX1','XXX2','XXX3')
                        AND SAMMEL.BTAG = arBTAG
                        AND SAMMEL.ART IN ('SKBETEX', 'SKSTTEX')
                        AND SAMMEL.FONDS_FK = FONDS.FONDS_ID
                        union all
                        SELECT 'Abgaenge' FLUSS,
                        sum(SAMMEL.ABRECHNUNGSBETRAGOW) BETRAG
                        FROM MAN_MAN.SAMMEL SAMMEL,
                        MAN_MAN.FONDS FONDS
                        WHERE SAMMEL.ABRECHNUNGSBETRAGOW <> 0
                        AND FONDS.ISIN IN ('XXX1','XXX2','XXX3')
                        AND SAMMEL.BTAG = arBTAG
                        AND SAMMEL.ART IN ('SVBETEX', 'SVSTTEX')
                        AND SAMMEL.FONDS_FK = FONDS.FONDS_ID
                        [/highlight]

                        Ergebnis:

                        FLUSS......|| ORDERBETRAG

                        Zugaenge || 3
                        Abgaenge || 2




                        Kann ich diese zwei Abfragen verbinden?

                        Gruß und danke für eure hilfe bis jetzt

                        Comment


                        • #13
                          Originally posted by ben1984 View Post
                          ...Geht das nicht mit dem Summieren in einer Abfrage?
                          Das geht schon, aber eben nicht so.
                          Mal als Beispiel:
                          Name, Geschlecht
                          Otto, Mann
                          Karin, Frau
                          Dörte, Frau
                          Klaus, Mann
                          Manfred, Mann

                          Du möchtest jetzt eine Abfrage von Name und Geschlecht, bei der zusätzlich in jeder Zeile die Anzahl für das jeweilige Geschlecht steht, also:
                          Otto, Mann, 3
                          Karin, Frau, 2
                          Dörte, Frau, 2
                          Klaus, Mann, 3
                          Manfred, Mann, 3
                          Mit einer einfachen Gruppierung
                          [highlight=sql]
                          select Name, Geschlecht, count(Geschlecht) Anzahl
                          from tabelle
                          group by Name, Geschlecht
                          [/highlight]
                          gehts nicht. Hier kommt das "falsche" Ergebnis, nämlich immer 1. Das weglassen von Name in der Group By-Klausel geht auch nicht -> Syntax- bzw. Gruppierungsfehler.

                          Lösung: Die Tabelle mit einer gruppierten Variante von sich selbst joinen.
                          [highlight=sql]
                          select a.Name, a.Geschlecht, b.Anzahl
                          from tabelle a
                          inner join (
                          select Geschlecht, count(*) Anzahl
                          from tabelle
                          group by Geschlecht
                          ) b on b.Geschlecht = a.Geschlecht
                          [/highlight]

                          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

                          Working...
                          X