[Access 20003] COUNT ( DISTINCT )

Pagina: 1
Acties:

  • Sandertjuhh
  • Registratie: November 2006
  • Laatst online: 30-11 14:45
Hallo Tweakers,

Ik ben bezig met een rapport query te ontwerpen om een bezettingsgraad uit te rekenen ( opdracht voor school ). Echter loop ik tegen een beperking van Access aan.

Ik kan namelijk in Access geen gebruik maken van COUNT(DISTINCT(kolomnaam).

Wanneer ik slechts 1 count pak (om het aantal bezette stoelen uit te rekenen) gaat het goed.
Deze query word dan door access gebruikt:
code:
1
2
3
4
5
SELECT Voorstelling.Voorstellingsnummer, Voorstelling.Titel, Uitvoering.Uitvoeringsnummer, Count(Bezetting.Stoelnummer) AS ["Bezette stoelen"]

FROM (Voorstelling INNER JOIN Uitvoering ON Voorstelling.Voorstellingsnummer = Uitvoering.Voorstellingsnummer) LEFT JOIN Bezetting ON (Uitvoering.Uitvoeringsnummer = Bezetting.Uitvoeringsnummer) AND (Uitvoering.Voorstellingsnummer = Bezetting.Voorstellingsnummer)

GROUP BY Voorstelling.Voorstellingsnummer, Voorstelling.Titel, Uitvoering.Uitvoeringsnummer;



Wanneer ik er het aantal stoelen bijpak gaat het fout. Dan krijg ik hele verkeerde waardes op de count (omdat er nog een join bij komt). Dit zou ik in alle andere programma's op kunnen lossen met een DISTINCT() voor de count te zetten. Maar in Access kan dat niet.

De volgende query word dan gebruikt:
code:
1
2
3
4
5
SELECT Voorstelling.Voorstellingsnummer, Voorstelling.Titel, Uitvoering.Uitvoeringsnummer, Count(Bezetting.Stoelnummer) AS ["Bezette stoelen"], Count(Stoel.Stoelnummer) AS ["Aantal stoelen"]

FROM ((Voorstelling INNER JOIN Uitvoering ON Voorstelling.Voorstellingsnummer = Uitvoering.Voorstellingsnummer) LEFT JOIN Bezetting ON (Uitvoering.Uitvoeringsnummer = Bezetting.Uitvoeringsnummer) AND (Uitvoering.Voorstellingsnummer = Bezetting.Voorstellingsnummer)) INNER JOIN Stoel ON Uitvoering.Zaal = Stoel.Zaal

GROUP BY Voorstelling.Voorstellingsnummer, Voorstelling.Titel, Uitvoering.Uitvoeringsnummer;



De werkende query in SQL server:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT  V.Titel,
        U.Voorstellingsnummer,
        U.Uitvoeringsnummer,
        V.Uitvoerende,
        COUNT(DISTINCT(S.Stoelnummer)) AS "Beschikbare stoelen",
        COUNT(DISTINCT(B.Stoelnummer)) AS "Bezette stoelen",
            
FROM    Uitvoering AS U INNER JOIN Voorstelling AS V
        ON U.Voorstellingsnummer = V.Voorstellingsnummer

        INNER JOIN Stoel AS S
        ON U.Zaal = S.Zaal

        LEFT OUTER JOIN Bezetting AS B
        ON B.Uitvoeringsnummer = U.Uitvoeringsnummer 
            AND B.Voorstellingsnummer = U.Voorstellingsnummer

GROUP BY V.Titel, U.Voorstellingsnummer, U.Uitvoeringsnummer, V.Uitvoerende

ORDER BY V.Titel, U.Uitvoeringsnummer


Zoals je ziet maak ik hier gebruik van 2 COUNT(DISTINCT()). Wanneer ik dit doe gaat het goed.
Heeft iemand enig idee hoe ik dit in access voor elkaar kan krijgen?

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Maak een query StoelenInZaal(Zaal, [Beschikbare Stoelen]) en join met die query in plaats van met Stoel.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Sandertjuhh
  • Registratie: November 2006
  • Laatst online: 30-11 14:45
Deze query gebruikt:

code:
1
2
3
SELECT Count(Stoel.Stoelnummer) AS ["Beschikbare stoelen"], Stoel.Zaal
FROM Stoel
GROUP BY Stoel.Zaal;



En het werkt perfect! Dank je wel

[ Voor 74% gewijzigd door Sandertjuhh op 18-03-2008 14:08 ]