Accessテクニックのホームへ戻る

■ 生徒の成績を5段階で評価(WHERE JOIN)  2000,2002,2003,2007)

 

成績テーブルと評価テーブルをWHERE句で結合して、成績を5段階で評価します。

 

1. 新規データベース作成

Accessを起動したら、ツールバーから新規作成のアイコンをクリックして、作業フォルダworkに新規データベースW050.mdbを作成します。

 

2. 成績、評価テーブルをインポート

Windowsのエクスプローラを起動したら、[050.mdb]をダブルクリックして開きます。050.mdbのデータベースウィンドウが表示されたら、tbl成績をドラッグしてW050.mdbのデータベースウィンドウにドロップします。同様の手順で、tbl評価をドラッグ&ドロップしてインポートします。テーブルをインポートしたら、050.mdbを閉じます。

 

3. 新規クエリ作成

データベースウィンドウのオブジェクトから[クエリ]をクリックして選択したら、新規オブジェクトのショートカットから[デザインビューでクエリを作成する]をダブルクリックします。「テーブルの表示」ダイアログが表示されたら、[テーブル]タブから[tbl成績][tbl評価]をダブルクリックしてデザインビューに追加します。[閉じる]ボタンをクリックしてダイアログを閉じます。

 

tbl成績から名前点数をダブルクリックしてグリッドにコピーします。点数の列の抽出条件に「Between [最小点] And [最大点]」を入力します。tbl評価からIDをダブルクリックしてグリッドにコピーします。

 

ツールバーから上書き保存のアイコンをクリックしたら「qry成績5段階評価」の名称で保存します。

 

新規クエリを作成して「qry成績5段階評価」の名称で保存

 

4. データシートビューに切り替え

ツールバーからデータシートビューのアイコンをクリックして切り替えます。データシートに生徒の点数と5段階評価が表示されます。閉じるボタンをクリックしてデータシートを閉じます。

 

データシートに生徒の5段階評価を表示

 

 

●解説

 

ここで作成したクエリは、成績テーブルと評価テーブルをWHERE句で結合しています。WHERE句に抽出条件として(((tbl成績.点数) Between [最小点] And [最大点]))のように指定すると、評価列には点数に対応した評価が表示されます。

 

tbl成績

 

tbl評価

            

 

SELECT tbl成績.名前, tbl成績.点数, tbl評価.評価

FROM tbl成績, tbl評価

WHERE (((tbl成績.点数) Between [最小点] And [最大点]))

 

                                                                                              

 

実行結果

 

成績テーブルと評価テーブルをWHERE句で結合したクエリを実行

 

SQLWHERE句でtbl成績とtbl評価を結合する代わりに、非等価結合でtbl成績とtbl評価を結合することもできます。非等価結合は、クエリのデザインビューではサポートしていませんのでSQLビューから直接SQLステートメントを入力します。

 

tbl成績とtbl評価を非等価結合したSQL

 

SELECT tbl成績.名前, tbl成績.点数, tbl評価.評価

FROM tbl成績 LEFT JOIN tbl評価

ON tbl成績.点数 Between tbl評価.最小点 And tbl評価.最大点;

 

5段階評価がもっと複雑になるときは、WHERE句で評価テーブルを結合する代わりにユーザー定義関数Grade()を使用します。この場合、点数列の抽出条件を空白にして、ID列のフィールドを「評価: Grade([点数])」のように書き換えます。

 

ユーザー定義関数を使用したSQL

 

SELECT tbl成績.名前, tbl成績.点数, Grade([点数]) AS 評価

FROM tbl成績;

 

Public Function Grade(intGrade As Integer) As String

  Dim strGrade As String

 

  If intGrade >= 90 And intGrade <= 100 Then

    strGrade = "A"

  ElseIf intGrade >= 80 And intGrade <= 89 Then

    strGrade = "B"

  ElseIf intGrade >= 70 And intGrade <= 79 Then

    strGrade = "C"

  ElseIf intGrade >= 60 And intGrade <= 69 Then

    strGrade = "D"

  Else

    strGrade = "E"

  End If

  Grade = strGrade

End Function

 

ダウンロード (050.lzh)