Announcement

Collapse
No announcement yet.

1 Tabelle, 2 Abfragen

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

  • 1 Tabelle, 2 Abfragen

    hallo,

    ich bitte euch um Unterstützung bei einem Problem.

    Aus der Tabelle "Service", die unter Anderem Attribute wie "ID", "Rechnung", "Rechnungsdatum" besitzt, sollen alle Rechnungen diesen und letzen Jahres summiert als Gesamtrechnung, also für 2008 und 2009, in 2 Spalten ausgegeben werden. Mein bestes Ergebnis war bisher folgender:

    SELECT serv1.Service AS gesamt1, serv2.Service AS gesamt2
    FROM Service AS serv1, Service AS serv2
    WHERE serv1.ID = 12345 and YEAR(serv1.RECHNDAT) = YEAR(NOW())-1
    and serv2.ID = 12345 and YEAR(serv2.RECHNDAT) = YEAR(NOW());

    Leider bekomme ich bei diesem Ansatz alle Einträge doppelt angezeigt, logischerweise aufgrund der gegenseitigen Verknüpfung. Aber weiter komme ich leider nicht.

    Dank und Grüsse

  • #2
    Hallo xinu,

    wenn die Werte wirklich in Spalten sollen, statt in Zeilen, dann geht das in Richtung PIVOT, das kann dann z.B. so aussehen:
    [highlight=SQL]SELECT SUM(CASE WHEN YEAR(SRV.RECHNDAT) = YEAR(NOW) THEN SRV.Service
    ELSE 0 END) AS SumAktJahr,
    SUM(CASE WHEN YEAR(SRV.RECHNDAT) = (YEAR(NOW) - 1) THEN SRV.Service
    ELSE 0 END) AS SumVorJahr
    FROM Service AS SRV
    WHERE SRV.ID = 12345
    and YEAR(SRV.RECHNDAT) IN (YEAR(NOW())-1, YEAR(NOW()))
    [/highlight]

    Syntax musst Du ggf. an die der verwendeten DBMS anpassen.
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hallo O. Helper,

      vielen Dank für deine qualifizierte und schnelle Hilfe. Das funktioniert genau so wie ich es haben wollte.
      Wie du auch bereits erwähnt hattest musste ich lediglich die Syntax etwas anpassen.

      Code:
      SELECT SUM( IIF( YEAR(SRV.RECHNDAT) = YEAR(NOW), SRV.Rechnung, 0) ) AS SumAktJahr,
             SUM( IIF( YEAR(SRV.RECHNDAT) = (YEAR(NOW) - 1), SRV.Rechnung, 0) ) AS SumVorJahr
      FROM Service AS SRV
      WHERE SRV.ID = 12345 AND YEAR(SRV.RECHNDAT) IN ( YEAR( NOW())-1, YEAR(NOW()) );
      Nun bin ich seit gestern dabei als alternative diese Abfrage so zu verändern, dass die beiden Jahresumsätze in einer Spalte, also in Zwei Reihen ausgegeben werden und kenne mittlerweile an die hundert Wege, wie es nicht funktionieren kann. Würdest du mir bitte noch einmal helfen?

      Grüsse, xinu

      Comment


      • #4
        Na, das ist sogar die viel einfache Variante: Mit GROUP BY
        [highlight=SQL]SELECT YEAR(SRV.RECHNDAT) AS Jahr, SUM(SRV.Rechnung) AS Summe
        FROM Service AS SRV
        WHERE SRV.ID = 12345
        AND YEAR(SRV.RECHNDAT) BETWEEN YEAR(NOW()) -1 AND YEAR(NOW())
        GROUP BY YEAR(SRV.RECHNDAT)
        ORDER BY YEAR(SRV.RECHNDAT)[/highlight]
        Und damit es pädagogisch wertvoll ist, diesesmal mit BETWEEN statt IN; falls Du die Zahlen mal für die letzten 5 Jahre haben möchtest
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Herzlichen dank, dass du dir Zeit genommen hast. Du hast mir sehr geholfen.
          Ich wünsche dir alles Gute.

          Grüsse, xinu

          Comment

          Working...
          X