2012-07-04 46 views
2

我想写一个连接两个单一表的Access查询,然后在每个字段上运行一个计数。COUNT()2在Access中有两个单独连接的列?

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; 

但是,它不起作用。 COUNT(DISTINCT)在Access中似乎不起作用。离开它允许查询运行,但我没有得到正确的结果。只使用一次就可以正常工作。我似乎无法在COUNT语句中编写子查询,我也不确定还有什么要做。

回答

2

如果您正在MS Access中使用子查询,您可以使用DCount,或者可以设置计数查询并加入到该查询中。我不确定重复是从哪里来的,所以下面的注释说明了一些想法。它没有得到适当的测试。

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;