I'm having an issue with a large (100,000s record) SQL database.
Here's the basic structure:
bookings - bookingcode, bookingdate
payments - paycode, bookingcode, paydate, payamount
pupilrecords - prcode, bookingcode, lessonscode, coursecode
lessons - lessoncode, coursecode, resortcode
resorts - resortcode, resortname
Notes
The pupil record can contain either a lessoncode or a coursecode but not both.
A record in the lessons table may or may not contain a coursecode, if it does, that links to the pupil record, if it doesn't, the pupil record is linked by the lessoncode.
I need to run a report that shows what payments are received on a particular date. Here's the SQL code I run at the moment:
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
All runs well as long as a booking hasn't got two pupilrecords - one with a lessoncode, the other a coursecode that point to separate "lessons" records but ultimately one "resorts" record". If that happens, the payment is listed twice.
How can I group the resortname (generated as rname) so that the record will only appear once even if it's linked from the original payment in two ways.
I hope that all makes sense!