Announcement

Collapse
No announcement yet.

Hilfe bei Umsatzstatistik (SQL-Abfrage)

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

  • Hilfe bei Umsatzstatistik (SQL-Abfrage)

    Hallo,

    ich bin gerade dabei eine kleine Jahresauswertung zu programmieren und stecke irgendwie bei der Abfrage fest und suche mal im Forum nach Hilfe.

    Bei der Auswertung ist es wichtig die Umsatzzahlen pro Mitarbeiter zu ermitteln und in einem Chart als Top 10 darzustellen. Das klappt soweit auch ganz gut.

    Zum besseren Verständnis hier mal der Aufbau meiner DB, die bisherige Abfrage und das Ergebnis:


    Datenbank hat folgenden Aufbau:

    id, Mitarbeiter, Betrag, Datum

    Datensätze sind wie folgt in der DB vorhanden:

    1, "abc", 20.00, 01.01.2008
    2, "abc", 10.00, 01.03.2008
    3, "abc", 40.00, 02.01.2007
    4, "abc", 20.00, 05.04.2007

    5, "xyz", 5.00, 03.04.2008
    6, "xyz", 20.00, 01.02.2008
    7, "xyz", 30.00, 05.02.2007

    8, "efg", 10.00, 01.03.2008
    9, "efg", 36.00, 02.03.2008
    10, "efg", 24,00, 03.03.2008

    usw...


    Die Jahresauswertung (Top 10) für das Jahr 2008 wird mit folgender
    SQL Anweisung herausgefiltert:

    select top 10 Umsatz_Gesamt.* from
    (select umsatz_2007.Mitarbeiter, sum(umsatz_2008.betrag) as Gesamt_Betrag_2008,
    sum(case month(Umsatz_2008.datum) when 1 then Umsatz_2008.betrag else 0 end) as Januar_2008,
    sum(case month(Umsatz_2008.datum) when 2 then Umsatz_2008.betrag else 0 end) as Februar_2008,
    sum(case month(Umsatz_2008.datum) when 3 then Umsatz_2008.betrag else 0 end) as Maerz_2008,
    sum(case month(Umsatz_2008.datum) when 4 then Umsatz_2008.betrag else 0 end) as April_2008,
    sum(case month(Umsatz_2008.datum) when 5 then Umsatz_2008.betrag else 0 end) as Mai_2008,
    sum(case month(Umsatz_2008.datum) when 6 then Umsatz_2008.betrag else 0 end) as Juni_2008,
    sum(case month(Umsatz_2008.datum) when 7 then Umsatz_2008.betrag else 0 end) as Juli_2008,
    sum(case month(Umsatz_2008.datum) when 8 then Umsatz_2008.betrag else 0 end) as August_2008,
    sum(case month(Umsatz_2008.datum) when 9 then Umsatz_2008.betrag else 0 end) as September_2008,
    sum(case month(Umsatz_2008.datum) when 10 then Umsatz_2008.betrag else 0 end) as Oktober_2008,
    sum(case month(Umsatz_2008.datum) when 11 then Umsatz_2008.betrag else 0 end) as November_2008,
    sum(case month(Umsatz_2008.datum) when 12 then Umsatz_2008.betrag else 0 end) as Dezember_2008
    from umsatz as Umsatz_2008
    where Umsatz_2008.mitarbeiter not is null AND year(Umsatz_2008.datum) = 2008
    group by Umsatz_2008.mitarbeiter
    ) as Umsatz_Gesamt
    order by Gesamt_Betrag_2008 DESC

    Als Ergebnissatz bekomme ich dann folgendes:

    Mitarbeiter | Gesamt_Betrag_2008 | Januar_2008 | Februar_2008 | Maerz_2008 | April_2008 | usw...

    efg | 70.00 | 0 | 0 | 70.00 | 0 | ...
    abc | 30.00 | 20.00 | 0 | 10.00 | 0 | ...
    xyz | 25.00 | 0 | 20.00 | 0 | 5.00 | ...


    Nun möchte ich anhand dieser Top 10 auch noch die Vorjahreswerte mit auswerten, aber da stecke ich einfach fest. Vielleicht hat jemand im Forum eine Idee, die mir weiterhelfen könnte!!?? Eine weitere Problematik steckt in der Tatsache, dass der Mitarbeiter "efg" im Vorjahr noch gar nicht beschäftigt war.

    Ich bin für jeden Tipp dankbar!

    Schönen Gruß
    Andreas

  • #2
    Originally posted by acegie View Post
    Hallo,


    Schönen Gruß
    Andreas
    Hallo,

    welches RDBMS darf's den sein ? Wenn Oracle, dann würde ich mich mal mit Anlaytics beschäftigen


    gruss

    Comment


    • #3
      Hallo dbwizard,

      sorry hab ich ganz vergessen:

      Arbeite mit dem MS SQL Server 2000
      und dem SQL Query Analyser.

      Das Script wird im Anschluss unter VB.net / C#
      zum Einsatz kommen.



      Gruß
      acegie

      Comment


      • #4
        Hallo,

        das gezeigte Beispiel verwendet doch bereits eine Derived Table (Inline-View), so dass eine zweite Abfrage für das Jahr 2007 hinzugefügt und über einen OUTER JOIN eingebunden werden kann.

        Comment


        • #5
          Hallo Andreas,

          danke für den Tipp mit der Derived Table (Inline-View) und
          der zweiten Abfrage mittels Outer Join!

          Hab mich da mal genauer informiert, aber ich bekomme
          es einfach nicht hin mit dem Outer Join auch die
          Ergebnisse für das Jahr 2007 mit auszuwerten!!

          Hast Du da vielleicht noch einen kleinen Denkanstoss
          für mich parat??

          Schönen Gruß
          acegie

          Comment


          • #6
            Hallo,

            hab die Abfrage doch noch hinbekommen!
            Ein wenig mit der Right Outer Join beschäftigt und
            schon lief es.

            Danke allen, die mit Rat und Tat zur Zeite standen!

            Gruß
            acegie

            Comment

            Working...
            X