Announcement

Collapse
No announcement yet.

verschiedene Datenbankfelder zu einer Abfrage

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

  • verschiedene Datenbankfelder zu einer Abfrage

    Hallo an alle,

    ich habe folgende Datenbankstruktur (Auszug) - an der ich leider nichts ändern kann.

    Abt1_Monat Abt1_Jahr Abt1_Wert Abt2_Monat Abt2_Jahr Abt2_Wert
    01 16 200,00 02 16 300,00
    02 16 400,00
    02 16 600,00 01 16 700,00


    Ich möchte folgendes Ergebnis haben:

    Monat(Abt1 und 2) Jahr (Abt1 und 2) SummeAbt1 SummeAbt2
    01 16 200 700
    02 16 1000 300
    Ich habe eine sum (case when) probiert, erhalte aber immer die Monate getrennt.

    Hat jemand eine Idee? Firebird ist die 2.5.

    VG

    Ronin269

  • #2
    Bitte in Firebird verschieben, falsches Unterforum angeklickt.

    Comment


    • #3
      Wie wäre es mit diesem Lösungsansatz? Sollte denke ich auch bei Firebird funktionieren.

      [highlight=sql]
      select monat, jahr, sum(wert) as wert
      from (select t.abt1_monat as monat,
      t.abt1_jahr as jahr,
      sum(t.abt1_wert) as wert
      from tabelle t
      group by t.abt1_monat, t.abt1_jahr
      union all
      select t.abt2_monat as monat,
      t.abt2_jahr as jahr,
      sum(t.abt2_wert) as wert
      from tabelle t
      group by t.abt2_monat, t.abt2_jahr)
      group by monat, jahr
      [/highlight]

      Comment


      • #4
        Mach jeweils eine Abfrage nur für die Summe von Abt1 bzw. Abt2 (jeweils Monat, Jahr, Summe). Diese beiden Subabfragen joinst du dann über Monat/Jahr zu einer. Da würde ein FULL OUTER JOIN helfen. Glaube aber nicht das Firebird den kennt.

        Ohne Full Outer Join würde eine weitere Tabelle die nur die Monate+Jahr (egal ob nur tempörär oder tatsächlich) darstellt helfen. Dann würdest du auch dann einen Datensatz für einen Monat bekommen wenn es weder für Abt1&Abt2 in diesem Monat Daten gibt. Ohne Details über dein konkretes Problem ist das eh meistens das was man will.

        Comment


        • #5
          Habe jetzt erst gesehen, dass die Werte in zwei verschiedenen Spalten stehen sollen.
          Dann vielleicht so?

          [highlight=sql]
          select monat, jahr, sum(wert1) as wert1, sum(wert2) as wert2
          from (select t.abt1_monat as monat,
          t.abt1_jahr as jahr,
          sum(t.abt1_wert) as wert1,
          sum(0) as wert2
          from /*tabelle t*/ (select '01' as abt1_monat,
          '16' as abt1_jahr,
          200 as abt1_wert,
          '02' as abt2_monat,
          '16' as abt2_jahr,
          300 as abt2_wert
          from dual
          union all
          select '02' as abt1_monat,
          '16' as abt1_jahr,
          400 as abt1_wert,
          null as abt2_monat,
          null as abt2_jahr,
          null as abt2_wert
          from dual
          union all
          select '02' as abt1_monat,
          '16' as abt1_jahr,
          600 as abt1_wert,
          '01' as abt2_monat,
          '16' as abt2_jahr,
          700 as abt2_wert
          from dual) t
          group by t.abt1_monat, t.abt1_jahr
          union all
          select t.abt2_monat as monat,
          t.abt2_jahr as jahr,
          sum(0) as wert1,
          sum(t.abt2_wert) as wert2
          from /*tabelle t*/ (select '01' as abt1_monat,
          '16' as abt1_jahr,
          200 as abt1_wert,
          '02' as abt2_monat,
          '16' as abt2_jahr,
          300 as abt2_wert
          from dual
          union all
          select '02' as abt1_monat,
          '16' as abt1_jahr,
          400 as abt1_wert,
          null as abt2_monat,
          null as abt2_jahr,
          null as abt2_wert
          from dual
          union all
          select '02' as abt1_monat,
          '16' as abt1_jahr,
          600 as abt1_wert,
          '01' as abt2_monat,
          '16' as abt2_jahr,
          700 as abt2_wert
          from dual) t
          group by t.abt2_monat, t.abt2_jahr)
          where monat is not null
          and jahr is not null
          group by monat, jahr
          [/highlight]

          Und ohne dual (Oracle spezifisch), bitte tabelle ersetzen.

          [highlight=sql]
          select monat, jahr, sum(wert1) as wert1, sum(wert2) as wert2
          from (select t.abt1_monat as monat,
          t.abt1_jahr as jahr,
          sum(t.abt1_wert) as wert1,
          sum(0) as wert2
          from tabelle t
          group by t.abt1_monat, t.abt1_jahr
          union all
          select t.abt2_monat as monat,
          t.abt2_jahr as jahr,
          sum(0) as wert1,
          sum(t.abt2_wert) as wert2
          from tabelle t
          group by t.abt2_monat, t.abt2_jahr)
          where monat is not null
          and jahr is not null
          group by monat, jahr
          [/highlight]

          Comment


          • #6
            Vielen Dank für Eure Hilfe!

            Das wird viel zu aufwendig. Dann werde ich doch die Sache mit einer Schleife in php lösen. Ich dachte, ich könnte die langsame Schleife von php relativ simpel umgehen. Es sollen ja Werte für alle 12 Monate + mehrere Jahre abgefragt werden.

            Trotzdem Danke!
            Zuletzt editiert von ronin269; 10.10.2016, 14:07.

            Comment


            • #7
              Hat mein SQL nicht das gewünschte Ergebnis geliefert?

              [highlight=sql]
              SELECT monat, jahr, SUM(wert1) AS wert1, SUM(wert2) AS wert2
              FROM (SELECT t.abt1_monat AS monat,
              t.abt1_jahr AS jahr,
              SUM(t.abt1_wert) AS wert1,
              SUM(0) AS wert2
              FROM tabelle t
              GROUP BY t.abt1_monat, t.abt1_jahr
              UNION ALL
              SELECT t.abt2_monat AS monat,
              t.abt2_jahr AS jahr,
              SUM(0) AS wert1,
              SUM(t.abt2_wert) AS wert2
              FROM tabelle t
              GROUP BY t.abt2_monat, t.abt2_jahr)
              WHERE monat IS NOT NULL
              AND jahr IS NOT NULL
              GROUP BY monat, jahr
              [/highlight]

              Comment


              • #8
                Danke FlexGer, doch, hatte ich erst später gelesen.



                es klappt wunderbar mit:
                [highlight=sql]SELECT monat, jahr, SUM(wert1) AS wert1, SUM(wert2) AS wert2
                FROM (SELECT t.abt1_monat AS monat,
                t.abt1_jahr AS jahr,
                SUM(t.abt1_wert) AS wert1,
                SUM(0) AS wert2
                FROM tabelle t
                GROUP BY t.abt1_monat, t.abt1_jahr
                UNION ALL
                SELECT t.abt2_monat AS monat,
                t.abt2_jahr AS jahr,
                SUM(0) AS wert1,
                SUM(t.abt2_wert) AS wert2
                FROM tabelle t
                GROUP BY t.abt2_monat, t.abt2_jahr)
                WHERE monat IS NOT NULL
                AND jahr IS NOT NULL
                GROUP BY monat, jahr[/highlight]

                perfekt!

                Vielen Dank, geht superschnell!!!
                Zuletzt editiert von ronin269; 10.10.2016, 14:26.

                Comment


                • #9
                  Ok freut mich

                  Comment

                  Working...
                  X