mawburn
mawburn

Reputation: 2335

COUNT() 2 Columns with 2 separate joins in Access?

I am trying to write an Access query that joins a single table twice, then run a count on one field from each.

SELECT Wines.wID, 
       Wines.num, 
       Wines.Brand, 
       Wines.wYear, 
       Wines.Variety, 
       Wines.Score, 
       g.fName, 
       g.lName , 
       Count(DISTINCT Votes.vote1) AS Vote1,  
       Count(DISTINCT Votes_1.vote2) AS Vote2
FROM   ((Wines 
           LEFT JOIN Guests AS g 
              ON Wines.wID = g.wineID) 
           LEFT JOIN Votes 
              ON Wines.num = Votes.vote1) 
           LEFT JOIN Votes AS Votes_1 
              ON Wines.num = Votes_1.vote2
WHERE (((Wines.pID)=2))
GROUP BY Wines.wID, Wines.num, Wines.Brand, 
         Wines.wYear, Wines.Variety, Wines.Score, g.fName, g.lName
ORDER BY Wines.Score DESC , Count(DISTINCT Votes.vote1) DESC;

However, it does not work. COUNT(DISTINCT) does not seem to work in Access. Leaving it out allows the query to run, but I do not get the correct results. Using it just once works fine. I can't seem to write a subquery in the COUNT statement and I'm not really sure what else to do.

Upvotes: 2

Views: 137

Answers (1)

Fionnuala
Fionnuala

Reputation: 91336

You can use DCount, if you are working within MS Access, a subquery, or it may be possible to set up a count query and join to that. I am not sure where the duplication is coming from, so the notes below illustrate a few ideas. It is not properly tested.

SELECT Wines.wID, 
   Wines.num, 
   Wines.Brand, 
   Wines.wYear, 
   Wines.Variety, 
   Wines.Score, 
   g.fName, 
   g.lName , 
   DCount("vote1","votes","vote1"=Wines.num) AS Vote1,  
   (SELECT Count(Vote2) FROM 
      (SELECT DISTINCT vote2 
       FROM votes v
       INNER JOIN Wines w ON v.vote2=w.Num
       WHERE w.pID=2 AND w.num=Wines.num)) AS Vote2
FROM   Wines 
           LEFT JOIN Guests AS g 
              ON Wines.wID = g.wineID

WHERE (((Wines.pID)=2))
GROUP BY Wines.wID, Wines.num, Wines.Brand, 
         Wines.wYear, Wines.Variety, Wines.Score, g.fName, g.lName
ORDER BY Wines.Score DESC , vote1 DESC;

Upvotes: 2

Related Questions