Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[SQL/MSSQL] Sum() met meerdere tabellen

Pagina: 1
Acties:

  • ggvw
  • Registratie: September 2001
  • Laatst online: 15-12-2024
Hoi, heb gezocht maar kon niet echt iets vinden dat op mijn probleem leek.

Het probleem is als volgt:

Stel je hebt tabel A, B en C. Een record uit tabel C hoort altijd bij een record uit tabel B en een record uit B hoort altijd bij een record van A. Tabel A is dus de top van de piramide, zeg maar.
Als je gegevens uit tabel A, B en C tegelijk nodig hebt en je gebruikt bv een left join, zullen, voor elk record uit tabel C, de gegevens uit tabel A en B worden herhaald.

Mijn probleem is dat als je uit alle 3 de tabellen een veld nodig hebt, en je SUM() gebruikt op het veld uit tabel B en C, dat de gegevens uit tabel B dubbel worden geteld in de gevallen dat er bij een record van B bijvoorbeeld twee records van C horen.

Ik begrijp wel waarom dat zo is, maar ik vraag me hoe je het voor elkaar kan krijgen dat sum() in tabel B elk uniek record van tabel B maar 1 keer meetelt. Is er misschien een soort 'algemene' oplossing voor zo'n soort probleem (in MS-SQL) ?

Volgen jullie het nog, of willen jullie een voorbeeld? :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:01
GROUP BY

[ Voor 82% gewijzigd door whoami op 01-02-2008 17:22 ]

https://fgheysels.github.io/


  • ggvw
  • Registratie: September 2001
  • Laatst online: 15-12-2024
Hmm het group by is volgens mij het probleem niet.. Moet nu helaas naar huis, maar ik zal morgen even een voorbeeld geven dat mijn probleem wat beter uitlegt.

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 18-11 21:18
subquery op B (met sum) en dan pas koppelen

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:01
Hmm, idd, als je met 2 SUMS werkt, dan denk ik dat je niet anders kan doen dan met 2 subqueries in je select list werken die de sums doen, en dan een correlated join.

https://fgheysels.github.io/


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Tuurlijk kan het ook wel anders:
SQL:
1
2
3
4
5
6
SELECT a.aid, FIRST(bsums.bs) as bsum, SUM(c.getal) as csum
FROM a, b, c, 
  (SELECT a2.aid, SUM(getal) as bs FROM a as a2, b
    WHERE b.aid=a2.aid GROUP BY a2.aid) as bsums
WHERE a.aid = b.aid AND b.bid = c.bid AND bsums.aid=a.aid
GROUP BY a.aid

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1