2

1 つのテーブルを 2 回結合し、それぞれから 1 つのフィールドでカウントを実行する 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)アクセスでは動作しないようです。省略してもクエリは実行できますが、正しい結果が得られません。1回使用するだけで問題なく動作します。COUNT ステートメントにサブクエリを記述できないようで、他に何をすればよいかわかりません。

4

1 に答える 1

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;
于 2012-07-04T09:01:57.183 に答える