4

こんにちは、私はフォーラムをしばらく閲覧しており、ここで最初の質問をしています。私は少し窮地に立たされており、助けを得ることができるかどうか疑問に思っていました. 私は Access 2007 を使用していますが、ネット上の質問に対する適切な回答をまだ見つけていません。

私のデータは診断コードと CustomerID であり、私が探しているのは、診断コードごとに CustomerID の個別の数を見つける理由です。Access 以外の SQL では、次のようになるのが理想的です。

SELECT DiagCode, Count(Distinct(CustomerID))
FROM CustomerTable
Group By DiagCode;

これが非常に単純な質問であることはわかっていますが、私が見つけた答えは複雑すぎる (複数の集計関数) か単純すぎるかのどちらかです。これは私がそれを解決するために行ったアプローチですが、これはあまりにも多くの結果を返しています:

SELECT DiagCode, Count(CustomerID)
FROM CustomerTable
WHERE CustomerID in (SELECT Distinct CustomerID from CustomerTable)
Group By DiagCode;

最初の投稿で言ったように、ここで明確になっていることを願っています。

4

3 に答える 3

4

私は同じ質問をして、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;
于 2013-11-12T18:28:17.927 に答える
1

これは Access 2007 および 2010 で機能します。

select format(sum(bpa_ext_price) /
              (select count(*) from (select distinct ord_num from sales)),
             "standard") AS Avg_Ord_Amt
from   sales
于 2015-04-03T18:58:38.643 に答える