Toon posts:

[SQL] MsAccess Group By

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de volgende query (versimpeld)

SQL:
1
2
3
SELECT count(*)
FROM Nodules
GROUP BY DiamAverage between 0 and 5, DiamAverage between 5 and 10, DiamAverage between 10 and 15, DiamAverage between 15 and 20, DiamAverage > 20


Wat nu het probleem is, als er niks wordt getelt tussen bijvoorbeeld (DiamAverage between 5 and 10) dan wordt er niks gegenereerd maar heeft het resultaat een rij minder.

Dus bijvoorbeeld:
5, 4, 1, 3

Terwijl ik wil zien:
5, 0, 4, 1, 3

Ik kan aan het resultaat niet zien welke group by niks bevat. Ik heb op got gezocht en kwam de volgende functie tegen: IFNULL. Deze werkt echter niet (in Access?). Wat ik dan zou willen doen is dat hij een resultaat genereert als er niks gevonden wordt dus dan zou je het volgende krijgen (denk ik):

SQL:
1
2
3
SELECT IFNULL(count(*), 0)
FROM Nodules
GROUP BY DiamAverage between 0 and 5, DiamAverage between 5 and 10, DiamAverage between 10 and 15, DiamAverage between 15 and 20, DiamAverage > 20


Weet iemand hoe dit (simpel) is te verhelpen?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 11:17

Janoz

Moderator Devschuur®

!litemod

De reden dat dit gebeurt is neit vreemd. Count telt het aantal regels in de resultset. Als er 0 resultaten zijn zit er niks in de resultset dus heeft count geen idee dat hij daar wat van moet tellen. Je zou het op kunnen lossen door een extra kolom in de result set te zetten en hiermee te joinen. Het probleem is alleen dat die ranges dan wat lastig worden.

Je zou een hulp tabelletje kunnen maken en een cumulatief resultaat opleveren
grens
0
5
10
15
20

En dan join je daarmee met 'ON modules.diamaverage >= tabel.grens'
Tot slot een group by tabel.grens.

De reden dat je een cumulatief resultaat zou moeten nemen is omdat je geen bovengrens hebt. Het wordt dan erg lastig om die in je query te zetten.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Dank voor je reactie. Ik had de resultaten nodig voor statistieken en heb ze uiteindelijk maar apart uitgevoerd. Ik had gedacht dat er een makkelijke oplossing voor zou zijn maar kennelijk is dit normaal.