1

古い Paradox データベースを置き換えるために、Access 2010 データベースを作成しています。クエリに取り掛かったばかりで、私が SQL の初心者であることを隠すことはできません。

私がやろうとしているのは、グラフで使用されるクエリを設定することです。グラフの Y 軸は単純な合格率で、X 軸は特定の日です。グラフは、フォームの読み込み時に作成され、その後、「Between Date() And Date()-30」(30 日、ローリング) の日付範囲で入​​力された新しいレコードが作成されます。

私が使用しているデータベースでは、1 日に複数の検査が行われ、複数の合格と複数の不合格があります。各検査は個別の記録です。

たとえば、2012 年 11 月 26 日に 7 回の検査が行われました。5 つが合格し、2 つが不合格で、71% ((5/7)*100%) の受け入れでした。「2012 年 11 月 26 日」と「71%」は、グラフ上のデータ ポイントを表します。2012 年 11 月 27 日に 8 件の検査が行われました。4 つが合格し、4 つが不合格で、50% の受け入れでした。等。

以下は、日付範囲「2012 年 11 月 26 日 - 2012 年 11 月 27 日:」のフィールド「日付」および「処分」を含むクエリの例です。

SELECT Inspection.Date, Inspection.Disposition
FROM Inspection
WHERE (((Inspection.Date) Between #11/26/2012# And #11/27/2012#) AND ((Inspection.Disposition)="PASS" Or (Inspection.Disposition)="FAIL"));

Date       | Disposition
11/26/2012 | PASS
11/26/2012 | FAIL
11/26/2012 | FAIL
11/26/2012 | PASS
11/26/2012 | PASS
11/26/2012 | PASS
11/26/2012 | PASS
11/27/2012 | PASS
11/27/2012 | PASS
11/27/2012 | FAIL
11/27/2012 | PASS
11/27/2012 | FAIL
11/27/2012 | PASS
11/27/2012 | FAIL
11/27/2012 | FAIL

*注 - 日付フィールドのタイプは「日付」で、性質フィールドのタイプは「テキスト」です。検査が行われない日があり、グラフに表示されない日があります。検査処分は「NA」としてリストすることもできます。これは、グラフ化されない別のタイプの検査を指します。

別のクエリで作成したいレイアウトを次に示します (ここでも、簡潔にするために、範囲は 2 日間のみです)。

Date       | # Insp | # Passed | # Failed | % Acceptance
11/26/2012 | 7      | 5        | 2        | 71 
11/27/2012 | 8      | 4        | 4        | 50 

私が行う必要があると思うのは、レコードの日付自体と残りのクエリ結果の「計算されたフィールド」を結合することです。問題は、日付ごとにレコードを「平坦化」し、検査の数と合格/不合格の数をすべて1つのクエリで管理する方法がわからないことです。これには複数の階層化されたクエリが必要ですか? これらの数値はグラフ形式でのみ使用されるため、クエリをテーブルとして保存しないことを好みます。

PASS "1" と FAIL "0" を割り当てることで "Disposition" フィールドが Textual であることを回避するために、データベースに新しい列を作成することを考えていましたが、これは失敗のようです。これをSQLで機能させる方法が必要です。適用可能な例が見つかりませんでした。

ご協力いただきありがとうございます!ご意見やご提案をお待ちしております。フォーム、クエリ、グラフを含むサンプル データベースも役に立ちます。

4

1 に答える 1

0

でグループ化してから、およびDateのような集計を使用して、そのグループの統計を計算できます。sumcount

select  Date
,       count(*) as [# Insp]
,       sum(iif(Disposition = 'PASS',1,0)) as [# Passed]
,       sum(iif(Disposition = 'FAIL',1,0)) as [# Failed]
,       100.0 * sum(iif(Disposition = 'PASS',1,0)) / count(*) as [% Acceptance]
from    YourTable
where   Disposition in ('PASS', 'FAIL')
group by
        Date
于 2013-01-04T13:07:22.153 に答える