Announcement

Collapse
No announcement yet.

TSQL Join gibt nicht alle Werte

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

  • TSQL Join gibt nicht alle Werte

    Hallo Leute,

    ich habe ein Problem mit meiner Abfrage.

    Ich arbeite mit SQL Server 2008 und habe dort in einer Datenbank eine Tabelle in der ich Umsätze stehen habe.. Über diese möchte ich eine Summe je Jahr bilden.
    Die Tabelle sieht so aus:

    ID
    Jahr
    Umsatz
    PersonenKey

    Nun bilde ich den Umsatz wie folgt:

    Select Jahr, sum(Umsatz)
    from UmsatzTab
    group by Jahr

    Ich bekomme als Werte:
    2010 5367,85
    2011 11598,59

    Das sind die richtigen Werte.

    Nun habe ich noch eine Personen Tabelle die wie folgt aufgebaut ist:
    Personenkey
    Vorname
    Nachname

    Also möchte ich meine Abfrage erweitern um den Namen.
    Also habe ich gemacht:

    Select a.Jahr, b.Nachname, b.Vorname, sum(a.Umsatz)
    From UmsatzTab as a Inner Join PersonenTab as b
    ON a.PersonenKey = B.PersonenKey
    Group By a.Jahr, b.Nachname, b.Vorname

    Ich bekomme als Werte:
    2010 5017,85
    2011 11498,59

    Das entspricht aber nicht, den Werten die ich oben habe.

    Ich habe es schon mit einem Left Join versucht, mit Unterabfragen etc. Mir gehen immer wieder Werte verloren. In der Personenkey gibt es keine NULL Werte in keiner der Tabellen. Es stehen dort auch über 200.000 Zeilen in der Umsatztabelle und ca. 30.000 in der Personentabelle, so dass ich nicht mal eben die Werte mir angucken kann. Hat jemand schon mal so ein Problem gehabt? Wenn ja, wie hat er das gelöst? Ich bin langsam verzweifelt und habe auch keinerlei Idee mehr. Bin daher für jede Hilfe/Denkanstoß/Idee/Hinweis dankbar.

    Danke schon mal im voraus.

  • #2
    Hallo,

    verstehe ich das richtig, dass Du im oberen sql noch ein "where Personenkey=x' eingefügt hast.
    Und die Gruppierung unten über die selbe person?

    Wenn ja, gruppier mal nach dem Personenkey und schau, welche Werte berechnet werden.
    Ich würde sowieso nicht über Namen gruppieren, was machst Du, wenn zwei den gleichen NAmen besitzen.

    Gruß

    Martin

    Comment


    • #3
      Hi Martin,

      nein ich habe keine WHERE Bedingung in den SQL Statements und gruppieren muss ich ja bei der Abfrage nach Nachname und Vorname, was aber keine Probleme bringt, da der Nachname aus der Personnalnummer und dem Nachnamen besteht.

      Was aber auch egal ist, da die Summen dennoch nicht stimmen.

      Wenn ich mir alle Datemsätze, gruppiert nach PersonenKey angucke, dann sitze ich die nächsten Monate hier. Es handelt sich dabei um ca. 24.000 Zeilen, die ich dann händisch durchschauen möchte.

      Gruß Ulrike

      Comment


      • #4
        Wenn es auch keine NUL-Werte gibt, vielleicht fehlt zu einem oder mehrern Umsätzen die Person mit dem entsprechenden Key.

        select * from Umsatztab a
        where not exists(select * from Personen b where a.PersonenKey = b.PersonenKey)

        sollte Dir Aufschluss darüber geben.

        Gruß
        docendo discimus

        Comment


        • #5
          Originally posted by LadyLunaLumen View Post
          Hi Martin,

          nein ich habe keine WHERE Bedingung in den SQL Statements und gruppieren muss ich ja bei der Abfrage nach Nachname und Vorname, was aber keine Probleme bringt, da der Nachname aus der Personnalnummer und dem Nachnamen besteht.

          Was aber auch egal ist, da die Summen dennoch nicht stimmen.

          Wenn ich mir alle Datemsätze, gruppiert nach PersonenKey angucke, dann sitze ich die nächsten Monate hier. Es handelt sich dabei um ca. 24.000 Zeilen, die ich dann händisch durchschauen möchte.

          Gruß Ulrike
          Hallo Ulrike,

          musst Du Beides nicht.

          Du gruppierst nach dem key sowie jahr und holst dir dann die namen.
          Beim zweiten vergleichst du mit sql und schaust dir die an, die unterschiedlich sind.

          So machen wir das beim testing mit mios von daten

          Gruß

          Martin

          Comment


          • #6
            Hi,

            ich habe es gefunden.
            So ein Sch... da hat jemand in die Personentabelle, einige Personen doppelt drin.
            Sprich Personalnummer, Nachname, Vorname und alle anderen Spalten die noch vorhanden waren sind komplett identisch.

            Der Negative Wert ist zustande gekommen, da es auch negative Umsätze gibt in der Tabelle.
            Tja. Fehler 40. Sind die eingegebenen Daten falsch, können natürlich auch die Werte solcher Abfragen nicht richtig sein.

            Man das hat gedauert, das zu finden.

            Ich habe einfach einmal eine Abfrage der Umsätze gemacht ohne Join und einmal mit Join.
            Dann habe ich die Umsätze aus der Abfrage 1 von den Umsätzen der Abfrage 2 Abgezogen.
            Als nächstes habe ich mir alle Zeilen anzeigen lassen, bei denen die Differenz nicht = 0 ist.
            Und schon habe ich den Fehler gefunden.

            Habe als Lösung eine Abfrage der Personen vorgenommen mit einem Group by auf die Personalnummer. Dann diese Abfrage mit der Umsatztabelle verknüpft. Supi, funktionierte.

            Danke für Eure Anregungen.

            Gruß Ulrike

            Comment

            Working...
            X