私は同じ質問をして、Microsoft の Access Team によるリンク (現在は廃止されています) を見つけて、これを達成する方法の素晴らしい実用的な例を見つけました。これも以下に含めます。
データ:
Color Value
Red 5
Green 2
Blue 8
Orange 1
Red 8
Green 6
Blue 2
テーブル内の一意の色の数を取得するには、次のようなクエリを記述できます。
SELECT Count(Distinct Color) AS N FROM tblColors
テーブルの Color フィールドには 4 つの一意の色があるため、値 4 が返されます。残念ながら、Access データベース エンジンは Count(Distinct) 集計をサポートしていません。Access テーブルからこの値を返すには、次のようなサブクエリを使用する必要があります。
SELECT Count(*) AS N
FROM
(SELECT DISTINCT Color FROM tblColors) AS T;
ここで、Sum などの別の集計値も含め、何らかの値 (この場合は Color) でグループ化するとします。SQL Server では、このクエリを次のように記述できます。
SELECT Color, Sum(Value) AS Total, Count(Distinct Color) AS N
FROM tblColors
GROUP BY Color
これにより、次の結果が得られます。
データ:
Color Total N
Blue 10 1
Green 8 1
Orange 1 1
Red 13 1
ここで、これが '1' の値を返すかどうかを尋ねている場合、答えはイエスです。私が理解しているように、ここでの Count(Distinct) は、特定のクエリの結果を確認するためのテストとして使用できます。
データが Count(Distinct) をサポートするサーバー上にある場合は、パススルー クエリを使用して結果を取得できる場合があります。Access データを扱っている場合、これは少し難しくなります。
前のクエリでサブクエリを使用したので、ここでも同じことを行う必要があります。ただし、次の SQL に示すように、2 つのサブクエリを使用する必要があります。
SELECT C.Color, Sum(C.Value) AS Total, T2.N
FROM
(SELECT T.Color, Count(T.Color) AS N
FROM
(SELECT DISTINCT Color, Count(*) AS N
FROM tblColors GROUP BY Color) AS T
GROUP BY T.Color) AS T2
INNER JOIN tblColors AS C
ON T2.Color = C.Color
GROUP BY C.Color, T2.N;