[MSSQL] Inner joins

rrobbyy

Mitglied
Hallo zusammen,

folgende Konstellation, an der ich mir schon seit Tagen den Kopf zerbreche:

Table PMSPROJEKTE
beinhaltet alle Projekte

Table PMSOBJEKTORDNER
beinhaltet alle dazugehörigen "Vorgänge" (Angebote, Rechnungen, Bestätigungen, etc)


Zu jedem Vorgang kann es mehrere Zahlungen und Rechnungen geben, die ID steht im PMSOBJEKTORDNER

Table VORGZAHLUNGEN
beinhaltet alle Zahlungen

Table VORGRECHNUNGEN
beinhaltet alle Rechnungen

Mein Ziel ist, dass ich in einem select alle Zahlungen und Rechnungen bekomme, aber ohne eine Wiederholung von Zeilen. Hier ist mein Abfrage inkl. Ausgabe:

Code:
SELECT
  PMSPROJEKTE.PROJEKTNR
  ,PMSPROJEKTE.BEZEICHNUNG AS [PMSPROJEKTE BEZEICHNUNG]
  ,PMSPROJEKTE.KURZNAME
  ,PMSSTATUS.BEZEICHNUNG AS [PMSSTATUS BEZEICHNUNG]
  ,PMSOBJEKTORDNER.OBJEKTNR
  ,PMSOBJEKTORDNER.OBJEKTKZ
  ,VORGRECHNUNG.BELEGNR AS [VORGRECHNUNG BELEGNR]
  ,VORGRECHNUNG.DATUM AS [VORGRECHNUNG DATUM]
  ,VORGRECHNUNG.NETTO AS [VORGRECHNUNG NETTO]
  ,VORGRECHNUNG.STEUER AS [VORGRECHNUNG STEUER]
  ,VORGRECHNUNG.BEMERKUNG AS [VORGRECHNUNG BEMERKUNG]
  ,VORGZAHLUNG.BELEGNR AS [VORGZAHLUNG BELEGNR]
  ,VORGZAHLUNG.DATUM AS [VORGZAHLUNG DATUM]
  ,VORGZAHLUNG.NETTO AS [VORGZAHLUNG NETTO]
  ,VORGZAHLUNG.STEUER AS [VORGZAHLUNG STEUER]
  ,VORGZAHLUNG.BEMERKUNG AS [VORGZAHLUNG BEMERKUNG]
FROM
  PMSPROJEKTE
  LEFT OUTER JOIN PMSSTATUS
    ON PMSPROJEKTE.ROWSTATUS = PMSSTATUS.ROWSTATUS
  INNER JOIN PMSOBJEKTORDNER
    ON PMSPROJEKTE.ROWPROJEKT = PMSOBJEKTORDNER.ROWPROJEKT
  LEFT OUTER JOIN VORGRECHNUNG
    ON PMSOBJEKTORDNER.OBJEKTNR = VORGRECHNUNG.ROWVORGANG
  LEFT OUTER JOIN VORGANG
    ON PMSPROJEKTE.ROWVORGMASTER = VORGANG.ROWVORGANG
  LEFT OUTER JOIN VORGZAHLUNG
    ON PMSOBJEKTORDNER.OBJEKTNR = VORGZAHLUNG.ROWVORGANG
WHERE
  PMSOBJEKTORDNER.OBJEKTKZ = N'VOR'

hat jemand eine Idee, wie ich SQL dazu bringe, dass keine doppelten Zeilen ausgegeben werden (siehe Anhang), bzw. diese Zellen leer bleiben?
 

Anhänge

  • projekt.txt
    2,2 KB · Aufrufe: 9
du hast recht, meine Aussage war unvollständig. hier noch mal genauer

die ersten beiden Datenzeilen zeigen zwei mal die selben Rechnungsdaten an, was wahrscheinlich dadurch kommt, dass zwei Zahlungen existieren.
Meine Frage ist jetzt, ob es möglich, dass dies verhindert werden kann.
 
Zuletzt bearbeitet:
und welche Attribute gehören zu den Rechnungsdaten? Ich weiss nicht, was du eigentlich verhindern willst bzw. was du genau haben willst. Wenn die Daten so in der Datenbank stehen, dann stehen sie dort halt so. Grenze erst mal die Attribute ein, die du in deinem View anzeigen willst. Du musst deine WHERE-Klausel vermutlich strikter fassen.

Gruß
Peter
 
Ich brauche auf jeden fall die relevanten Daten einer Rechnung. Also Nummer, Datum, Betrag, ggfs. die Bemerkung. Diese sind auch in in den einzelnen Feldern so hinterlegt. Das würde ich als Attribut hier definieren.


In der DB exisitert immer nur eine Rechnungsnummer (wenn nicht, macht das Finanzamt natürlich Stress ; - Ausnahme bei Stornos, also Minus-Beträgen).
Diese Daten benötige ich auch erstmal - was auch kein Problem ist, wenn ich den select so aufbaue, wie oben geschrieben. Ich brauche ja nur die Felder der Tabelle VORGZAHLUNGEN entfernen und bekomme eine wunderschöne Liste, die alle Rechnungen der Projekte enthält. So weit so gut.


Füge ich jedoch die Felder der Tabelle VORGZAHLUNGEN wieder ein, sehe ich als Ergebnis plötzlich mehr Zeilen, was ja durchaus sein kann, da es mehr Zahlungen geben kann, als Rechnungen.

Die Aussage, dass sich die Datensätze im Anhang unterscheiden ist zwar korrekt, aber inhaltlich falsch, denn es gibt tatsäch keine doppelten Rechnungsnummern.

Im Anhang kann man gut sehen, dass es Rechnungen gibt, die doppelt erscheinen, obwohl dies nicht sein kann und darf. Der Datensatz untescheidet sich lediglich bei den Zahlungen.

Das Ziel ist Folgendes: Eine Auflistung, die alle Rechungen, sowie alle Zahlungen eines Projektes beinhalten. Ich erwarte aber eine Liste, wie im zweiten Anhang. Also ohne, dass gleiche Rechnungen mehrmals aufgeführt werden.
 

Anhänge

  • projekt2.txt
    1,1 KB · Aufrufe: 8
ich habe eine andere Lösung gefunden.
Ich mache zwei SELECTS und verbinde diese mit UNION.
Zudem füge ich eine Spalte ein, an der ich erkenne, um was es sich bei der Zeile handelt
 

Neue Beiträge

Zurück