Announcement

Collapse
No announcement yet.

Frage zur Zusammenfassung (Group by??)

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

  • Frage zur Zusammenfassung (Group by??)

    Ich will das Resultat einer Abfrage mit "select" dahingehend zusammenfassen, dass nur noch die Summe aller positiven und negativen Ergebnisse ausgegeben wird (wie unten) und nicht alle möglichen Einzelzeilen. Mir gelingt hierbei nur die Ausgabe einer Gesamtsumme (=37). Hat jemand eine Idee?? Danke.


    A B A B
    Teil1 -5 Teil1 -14
    Teil1 -9 Teil1 51
    Teil1 15
    Teil1 36

  • #2
    A B A B
    Teil1 -5 Teil1 -14
    Teil1 -9 Teil1 51
    Teil1 15
    Teil1 36
    wie sieht deine Tabelle aus? Wie kommst du da auf 37?

    Bei GROUP BY gibt aus noch die HAVING-Klausel.

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Danke für die Antwort. Die Angabe oben war nur ein Beispiel. Also, die Daten sehen wie folgt aus:

      LAGER SUM STUECK WARENGRUPPE
      1 8 4 10001
      1 8 8 10001
      1 15 15 10001
      1 56 1 10001
      1 74 2 10001
      1 90 3 10001
      1 -286 -1 10001
      1 5 5 10002
      1 18 6 10002
      1 28 4 10002
      1 57 3 10002
      1 74 2 10002
      1 92 1 10002
      1 -4 -2 10002
      1 -37 -1 10002
      1 9 3 10003
      1 14 14 10003
      1 30 2 10003
      1 190 1 10003
      1 -5 -1 10003

      nach folgender Abfrage:

      select lager, sum(buc.stueck * buc.bewertungsfaktor), stueck, war.warengruppe from buc

      join art on art.artikelnr = buc.artikelnr
      join war on war.warengruppe = art.warengruppe

      where buchungsart = 'LBU'
      group by lager, war.warengruppe , stueck
      order by war.warengruppe

      Und jetzt sollen alle positiven und negativen Beträge in "sum" je Warengruppe summiert werden. Je Warengruppe sollen also nur 2 Zeilen erscheinen.

      Comment


      • #4
        Hallo,

        [highlight=sql]
        SELECT Warengruppe, SUM(Sum)
        FROM #tmp
        WHERE Sum > 0
        GROUP BY Warengruppe
        UNION
        SELECT Warengruppe, SUM(Sum)
        FROM #tmp
        WHERE Sum < 0
        GROUP BY Warengruppe
        [/highlight]

        0 ist ausgeschlossen, ist aber für die Summenbildung eh nicht relevant.

        Tipp: Der Code kann mit [highlight=sql]dein Code[/highlight] formatiert werden.

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Nochmal Danke - werde ich ausprobieren. Ich melde mich.

          Comment


          • #6
            Hallo,

            sollte gewünscht sein das Ergebnis in einer Zeile zu haben kann dies verwendet werden.

            [highlight=sql]
            SELECT t.Warengruppe, t1.Summe AS Maximum, t2.Summe AS Minimum
            FROM #tmp AS t
            JOIN (SELECT Warengruppe, SUM(Sum) AS Summe FROM #tmp WHERE Sum > 0 GROUP BY Warengruppe) AS t1
            ON t.Warengruppe = t1.Warengruppe
            JOIN (SELECT Warengruppe, SUM(Sum) AS Summe FROM #tmp WHERE Sum < 0 GROUP BY Warengruppe) AS t2
            ON t.Warengruppe = t2.Warengruppe
            GROUP BY t.Warengruppe, t1.Summe, t2.Summe
            ORDER BY t.Warengruppe
            [/highlight]

            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              ohne Union..

              [highlight=sql]
              SELECT Warengruppe
              , SUM (CASE WHEN Sum > 0 THEN Sum ELSE 0 END)
              , SUM (CASE WHEN Sum < 0 THEN Sum ELSE 0 END)
              FROM #tmp
              GROUP BY Warengruppe
              [/highlight]

              Comment


              • #8
                Super, danke!

                Ich hab mir doch gedacht dass es einfacher gehen muss. Wusste bloß nicht wie.

                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #9
                  Hallo,

                  habe Deinen Vorschlag wie folgt ausgeführt:

                  SELECT Warengruppe,
                  SUM (CASE WHEN Sum > 0 THEN Sum ELSE 0 END),
                  SUM (CASE WHEN Sum < 0 THEN Sum ELSE 0 END) FROM buc

                  WHERE buchungsart = 'LBU'
                  and
                  buc.Datum >= '01.10.2008' and
                  buc.Datum <= '31.10.2008'
                  and buc.lager = '1'

                  GROUP BY Warengruppe

                  und bekomme aber die folgende Fehlermeldung:

                  "Allg. SQL-Fehler Token unknown line 2 char 10 >".

                  Er mag das ">"-Zeichen irgendwie nicht. Was mache ich falsch??

                  Danke

                  Comment


                  • #10
                    Je Warengruppe sollen also nur 2 Zeilen erscheinen.
                    So bekommst du aber blos 1 Zeile pro Warengruppe

                    Welche Datenbank benutzt du - diese Info wird spätestens jetzt benötigt -> in Zukunft bitte immer sofort angeben.

                    mfG Gü
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #11
                      Meines Wissens FIREBIRD.

                      Comment

                      Working...
                      X