MS Access 2016 サブクエリカウントによるレコード数とパーセント結果

MS Access 2016 サブクエリカウントによるレコード数とパーセント結果

修理チケットの数を含むテーブル内のレコード数をカウントするクエリがあり、その結果は会社別が完了した修理チケットの数になります。例: Companycode | CompnayName | CountOfTickets

SELECT 
Incident.CompanyCode, Count(Incident.CompanyCode) AS IncCount
FROM 
Incident
GROUP BY
Incident.CompanyCode, Incident.IncidentType, Incident.IncidentClosed
HAVING
(((Incident.IncidentType)="On - Site") AND 
((Incident.IncidentClosed)=True));

さて、私が理解するのに苦労しているのは、次のことです。カウントされる各レコードには、チケットが SLA を満たしているとマークするためのフィールドがあります。このフィールドは、「Y」または「N」のいずれかのテキスト フィールドです。

私がやろうとしているのは、上記のクエリ内で「Y」または「N」のいずれかの基準を満たすレコードの数をカウントし、その結果をメイン クエリの数で割って、基準に一致する修理チケットの割合を取得することです。つまり、xyz 社の x 件の修理チケットのうち、x% が SLA を満たしています。

これにはサブクエリが含まれる可能性が高いことはわかっていますが、どのようにコーディングするか、サブクエリをどこに配置するかがわかりません。

結果を同じ結果テーブルの一部として取得したいです。つまり、Companycode | CompnayName | CountOfTickets | % Met SLA などです。

解決策が簡単なものかどうかはわかりませんが、私はしばらくこの問題に取り組んできましたが、解決策がわかりません。

どのような助けでも大歓迎です。

この投稿を確認していただき、またご協力いただきありがとうございます。

グレッグ

答え1

SELECT 
    CompanyName, 
    CompanyCode, 
    Count(*), 
    Sum(iif(MetSLA, 1, 0))/Count(*) * 100
FROM 
    Incident
WHERE 
    IncidentType = "On - Site" 
    AND IncidentClosed = Yes
GROUP BY 
    CompanyName, CompanyCode;

説明: このSum(iif(MetSLA, 1, 0))式は、MetSLA フラグが設定されている (true/yes) 行を効果的にカウントします。Sum行がグループ化された後 (is のように)、集計関数として適用されますCount。したがって、MetSLA=yes 行の数は、その会社の行のパーセンテージとして取得されます (グループ化は会社別であるため)。

関連情報