SQL GROUPING Werte aus der gleichen Tabelle

Ich habe ein Problem mit einer großen (100.000s datasatz) SQL-database.

Hier ist die Grundstruktur:

Buchungen – Buchungscode, Buchungsdatum

Zahlungen – paycode, buchcode, paydate, payamount

pupilrecords – prcode, buchcode, lektionscode, coursecode

Lektionen – Lektionscode, Kurscode, Resortcode

resorts – resortcode, resortname

Notizen
Der Schülerdatensatz kann entweder einen Lektionscode oder einen Kurscode enthalten, aber nicht beide.
Ein Rekord in der Lektionstabelle kann oder darf nicht einen Kurscode enthalten, falls dies der Fall ist, der Links zum Schülerdatensatz, falls dies nicht der Fall ist, wird der Schülerdatensatz durch den Lektionscode verknüpft.

Ich muss einen Bericht ausführen, der zeigt, welche Zahlungen zu einem bestimmten timepunkt eingegangen sind. Hier ist der SQL-Code, den ich momentan laufe:

SELECT payments.payamount, (COALESCE(resorts1.resortname, '') + COALESCE(resorts2.resortname, '')) AS rname FROM payments LEFT JOIN pupilbookings ON payments.bookingcode = pupilbookings.bookingcode LEFT JOIN lessons AS lessons1 ON pupilbookings.lessonscode = lessons1.lessonscode LEFT JOIN resorts AS resorts1 ON lessons1.resortcode = resorts1.resortcode LEFT JOIN lessons AS lessons2 ON pupilbookings.coursecode = lessons2.coursecode LEFT JOIN resorts AS resorts2 ON lessons2.resortcode = resorts2.resortcode WHERE paydate = ' & date_here & ' GROUP BY payamount, resorts1.resortname, resorts2.resortname ORDER BY rname 

Alles läuft gut, solange eine Buchung nicht zwei Pupillenrecords hat – eine mit einem Lektionscode, die andere einen Kurscode, der auf separate "Lektionen" datasätze hinweist, aber letztlich ein "resorts" record ". Wenn das passiert, wird die Zahlung zweimal aufgeführt .

Wie kann ich den resortname (generiert als rname) gruppieren, damit der datasatz nur einmal angezeigt wird, auch wenn er von der ursprünglichen Zahlung auf zwei Arten verknüpft ist.

Ich hoffe das macht alles Sinn!

Nicht positiv Ich folge, was du bist nach, aber wenn Sie nicht wollen, mehrere datasätze, können Sie die 2. Satz von Joins zu beseitigen und nur erweitern Sie Ihre JOIN Kriterien:

 SELECT payments.payamount ,COALESCE(resorts1.resortname, '') AS rname FROM payments LEFT JOIN pupilbookings ON payments.bookingcode= pupilbookings.bookingcode LEFT JOIN lessons AS lessons1 ON pupilbookings.lessonscode = lessons1.lessonscode OR pupilbookings.coursecode = lessons1.coursecode LEFT JOIN resorts AS resorts1 ON lessons1.resortcode = resorts1.resortcode WHERE paydate = ' & date_here & ' GROUP BY payamount, resorts1.resortname ORDER BY rname