Microsoft Access Club >SQL入門講座 >このページ >次頁 < 前項  サイト内検索
 

重複データの表示、非表示を切り替える - ALL句 、DISTINCT句 : SQL入門講座



重複しているレコードの値を非表示設定にすることができます。見易さの点でよく使われる技法です。なお、この非表示とは重複しているフィールドをグループ化した時と同じです。

GROUP BY句 構文

ALL句とは、同じフィールド内に重複したレコードがある場合でも、そのままデータ表示を行うSQL構文です。DISTINCT句とは、同じフィールド内に重複したレコードがある場合は、最初のレコードのみ表示し、他のレコードを非表示にするSQL構文です。

  • 指定しない場合は、ALL句が既定値になります。
サンプルテーブル

サンプルテーブル(支払い管理)を下記のように用意します。

支払先 支払額
Akira製作所(株) ¥1,255,454
松村物産商事(株) ¥2,226,437
あきら立花工務店(株) ¥926,370
柴田運輸興産(株) ¥3,340,990
松村物産商事(株) ¥1,256,200
港材木販売(株) ¥4,120,000
榊原販売(株) ¥8,310,056
郭ゴム(株) ¥783,200
速水冷凍食品(株) ¥10,093,200
松村物産商事(株) ¥8,196,200
柴田運輸興産(株) ¥522,030
港材木販売(株) ¥96,230
郭ゴム(株) ¥783,200
あきら立花工務店(株) ¥722,100
構文
[ALL句] SELECT ALL filename 〜
[DISTINCT句] SELECT DISTINCT filename 〜
引数 意味 指定
fieldname フィールド名を指定します。 省略不可。
サンプル構文

「支払い管理」テーブルを元に、支払先の重複している値を非表示にします。

  1. SELECT DISTINCT 支払先 FROM 支払管理;

「支払い管理」テーブルを元に、 支払先の重複している値を非表示にします。フィールドを2つ以上指定した場合、それらのレコードの値が全て同じであれば非表示になります。

  1. SELECT DISTINCT 支払先,支払額 FROM 支払管理;

事例2 - DAOを用いた事例

DAOを用いてサンプル構文No2を以下のように実行します。

Sub MySQLDISTINCT()

On Error GoTo エラー
                
    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim mySQL As String
    
    Set db = CurrentDb
    mySQL = "SELECT DISTINCT 支払先,支払額 FROM 支払管理;"
    
    Set qdf = db.CreateQueryDef("Q_売り上げ管理", mySQL)
    DoCmd.OpenQuery qdf.Name
                
    db.Close: Set db = Nothing
    
    Exit Sub
    
エラー:
    
    If Err.Number = 3012 Then
        db.QueryDefs.Delete "Q_売り上げ管理"
        Resume
    Else
        MsgBox Err.Number & " : " & Err.Description
    End If
    
End Sub
留意点
  • VBA内でSQLを用いる場合は、前後をダブルクォーション(")で囲みます。
  • 同名のテーブルが既に存在している場合、Deleteメソッドを用いて削除します。
結果

下記のようにデータが表示されます。

クエリで作成すると・・・

このSQLステートメントをAccessオブジェクトのクエリで作成すると、下記のようになります。

クエリ自体は単なる選択クエリですが、クエリプロパティを見ると「全フィールド表示」に"いいえ"が設定されています。

2004/08/21

ページの先頭へ 前ページへ戻る

 


重複データの表示、非表示を切り替える - ALL句 、DISTINCT句 : SQL入門講座


-Microsoft Access Club-

動画配信(ダウンロード、ストリーミング)対応の専用レンタルサーバー。データセンター設置場所はアメリカ合衆国です。: 動画サーバードットコム
動画配信(ダウンロード、ストリーミング)対応の専用レンタルサーバー。
データセンター設置場所はアメリカ合衆国です。
100Mbps〜1Gbpsまで対応できます。