Ik ben al een tijdje bezig met een query om een bepaald totaalbedrag te berekenen aan de hand van verschillende waarden in twee tabellen in een database. Die berekeningen moeten realtime gemaakt worden omdat er veel gemuteerd wordt in de tabellen. Het lukt me echter niet om de juiste waardes terug te krijgen - ik krijg of waarden terug die een factor 2 te hoog zijn of helemaal niks.
Eerst de tabellen:
Elk record in BESCHIKKINGEN of CONTRACTEN heeft altijd een corresponderend record in CMFRECORD. Daarbij zijn de id's van beide records gelijk *. De kolom userkey is nodig omdat ik alleen de rijen uit beide tabellen wil hebben van één bepaalde userkey.
(* Dit betekent dan ook dat de nummering van id's in de tabellen BESCHIKKINGEN en CONTRACTEN niet netjes doorlopen - die zullen bijvoorbeeld verspringen van 1, 3, 6, 7, 10 etc. De tussenliggende id's zijn dan in gebruik in andere tabellen.)
De waarden die ik terug wil hebben uit de query zijn:
- Credit: optelling van bs_beschikkingsbedrag van alle records van de betreffende userkey
- Debet: optelling van ct_tarief per rij vermenigvuldigd met ct_eenheden
- Saldo: credit min debet
Ik heb tot nu toe twee queries geprobeerd:
Hierbij krijg ik nummerieke waardes terug die helemaal niet kloppen.
Hierbij krijg ik helemaal geen waardes terug (en dan zit de totaalberekening er nog niet eens in).
Het stomme is dat ik wél de goede credit en debetwaardes krijg als ik deze afzonderlijk query, het lukt echter niet in één query (en dat moet wel). Heeft iemand hier wellicht een idee over hoe dit te doen? Alvast veel dank!
(NB. opmerkingen over de databasestructuur hoeven niet, het was niet mijn idee en ik heb er geen invloed op
)
Eerst de tabellen:
BESCHIKKINGEN | CONTRACTEN | CMFRECORD |
bs_id | ct_id | id |
bs_beschikkingsbedrag | ct_tarief | userkey |
ct_eenheden |
Elk record in BESCHIKKINGEN of CONTRACTEN heeft altijd een corresponderend record in CMFRECORD. Daarbij zijn de id's van beide records gelijk *. De kolom userkey is nodig omdat ik alleen de rijen uit beide tabellen wil hebben van één bepaalde userkey.
(* Dit betekent dan ook dat de nummering van id's in de tabellen BESCHIKKINGEN en CONTRACTEN niet netjes doorlopen - die zullen bijvoorbeeld verspringen van 1, 3, 6, 7, 10 etc. De tussenliggende id's zijn dan in gebruik in andere tabellen.)
De waarden die ik terug wil hebben uit de query zijn:
- Credit: optelling van bs_beschikkingsbedrag van alle records van de betreffende userkey
- Debet: optelling van ct_tarief per rij vermenigvuldigd met ct_eenheden
- Saldo: credit min debet
Ik heb tot nu toe twee queries geprobeerd:
SQL:
1
2
3
4
5
6
| SELECT SUM(b.BS_Beschikkingsbedrag) as Credit, (SUM(c.CT_Tarief)*SUM(c.CT_Eenheden)) as Debet, (SUM(b.BS_Beschikkingsbedrag)-(SUM(c.CT_Tarief)*SUM(c.CT_Eenheden))) AS Totaal FROM beschikkingen b, contracten c WHERE b.BS_ID IN (SELECT id FROM cmfrecord WHERE userkey = ?) AND c.CT_ID IN (SELECT id FROM cmfrecord WHERE userkey = ?) |
Hierbij krijg ik nummerieke waardes terug die helemaal niet kloppen.
SQL:
1
2
3
4
5
| SELECT SUM(beschikkingen.BS_Beschikkingsbedrag) as Credit, (SUM(contracten.CT_Tarief)*SUM(contracten.CT_Eenheden)) as Debet FROM beschikkingen INNER JOIN cmfrecord ON beschikkingen.BS_ID = cmfrecord.ID, contracten INNER JOIN cmfrecord ON contracten.CT_ID = cmfrecord.ID WHERE cmfrecord.userkey = ? |
Hierbij krijg ik helemaal geen waardes terug (en dan zit de totaalberekening er nog niet eens in).
Het stomme is dat ik wél de goede credit en debetwaardes krijg als ik deze afzonderlijk query, het lukt echter niet in één query (en dat moet wel). Heeft iemand hier wellicht een idee over hoe dit te doen? Alvast veel dank!
(NB. opmerkingen over de databasestructuur hoeven niet, het was niet mijn idee en ik heb er geen invloed op