SQLの構文に自作関数を使用することができます。
自作関数例:
引数を10倍にして返す関数です。
これを標準モジュールに入力します。
Public Function AcCalc(lval As Long) As Long
AcCalc = lval * 10
End Function
構文例:
SQL = "SELECT AcCalc(フィールド名) FROM テーブル名"
CurrentDb.Execute SQL, dbFailOnError
SQL = "SELECT AcCalc(売上データ) FROM 2008年実績"
2008年実績テーブルの売上データを10倍にした値を取得します。
スポンサーリンク
2008-03-31
2008-03-27
Tips144 - Nullでないデータを抽出する IS NOT NULL
NULLかどうか判定するのには「ISNULL」を使用しました。
ISNULL関数は、値がNULLの時は「真(TRUE)」が返りました。
それとは逆に、値がNULLでない時に「真(TRUE)」を返すには、「IS NOT NULL」を使用します。
構文例
SQL = "SELECT フィールド名 FROM テーブル名 WHERE 判定フィールド名 IS NOT NULL"
CurrentDb.Execute SQL, dbFailOnError
SQL = "SELECT 二学期点数 FROM テスト結果 WHERE 一学期点数 IS NOT NULL"
テスト結果テーブルから一学期がNULLでない点数の二学期の点数を抽出します。
ISNULL関数は、値がNULLの時は「真(TRUE)」が返りました。
それとは逆に、値がNULLでない時に「真(TRUE)」を返すには、「IS NOT NULL」を使用します。
構文例
SQL = "SELECT フィールド名 FROM テーブル名 WHERE 判定フィールド名 IS NOT NULL"
CurrentDb.Execute SQL, dbFailOnError
SQL = "SELECT 二学期点数 FROM テスト結果 WHERE 一学期点数 IS NOT NULL"
テスト結果テーブルから一学期がNULLでない点数の二学期の点数を抽出します。
2008-03-21
Tips143 - 文字位置を指定し検索する LIKE '??ABC??'
パターンマッチングをするにはLIKEを使用しますが、何文字目の文字を検索させるには'?'を使います。
例えば3文字で2文字目が'A'のデータを検索するには
SQL = "SELECT * FROM テーブル名 WHERE 検索フィールド名 LIKE '?A?'"
になります。
文字数を指定しない場合は
SQL = "SELECT * FROM テーブル名 WHERE 検索フィールド名 LIKE '?A*'"
になります。
使用サンプル:
郵便番号の枝番の上2桁が'00'のデータを検索します。
SQL = "SELECT * FROM T_住所録 WHERE 郵便番号 LIKE '????00??'"
Set rs = CurrentDb.OpenRecordset(SQL)
例えば3文字で2文字目が'A'のデータを検索するには
SQL = "SELECT * FROM テーブル名 WHERE 検索フィールド名 LIKE '?A?'"
になります。
文字数を指定しない場合は
SQL = "SELECT * FROM テーブル名 WHERE 検索フィールド名 LIKE '?A*'"
になります。
使用サンプル:
郵便番号の枝番の上2桁が'00'のデータを検索します。
SQL = "SELECT * FROM T_住所録 WHERE 郵便番号 LIKE '????00??'"
Set rs = CurrentDb.OpenRecordset(SQL)
2008-03-17
Tips142 - フィールド名を変更する ALTER TABEL
Accessでは「ALTER TABLE CHANGE」が使えないので、下記の手順で行います。
1)新規フィールドの追加
2)データコピー
3)以前のフィールド削除
実行例(国語フィールドを社会フィールドに変更):
1)新規社会フィールドの追加
SQL = "ALTER TABLE 中間テスト結果 ADD COLUMN 社会 INTEGER"
CurrentDb.Execute SQL, dbFailOnError
2)国語データを社会データにコピー
SQL = "UPDATE 中間テスト結果 SET 社会=国語"
CurrentDb.Execute SQL, dbFailOnError
3)以前の国語フィールド削除
SQL = "ALTER TABLE 中間テスト結果 DROP COLUMN 国語"
CurrentDb.Execute SQL, dbFailOnError
これで完了です。
1)新規フィールドの追加
2)データコピー
3)以前のフィールド削除
実行例(国語フィールドを社会フィールドに変更):
1)新規社会フィールドの追加
SQL = "ALTER TABLE 中間テスト結果 ADD COLUMN 社会 INTEGER"
CurrentDb.Execute SQL, dbFailOnError
2)国語データを社会データにコピー
SQL = "UPDATE 中間テスト結果 SET 社会=国語"
CurrentDb.Execute SQL, dbFailOnError
3)以前の国語フィールド削除
SQL = "ALTER TABLE 中間テスト結果 DROP COLUMN 国語"
CurrentDb.Execute SQL, dbFailOnError
これで完了です。
2008-03-13
Tips141 - Where句で使う比較演算子
フィールド名 = 検索値 (一致する)
フィールド名 <> 検索値 (一致しない)
フィールド名 > 検索値 (検索値より大きい)
フィールド名 < 検索値 (検索値より小さい)
フィールド名 >= 検索値 (検索値以上)
フィールド名 <= 検索値 (検索値以下)
フィールド名 <> 検索値 (一致しない)
フィールド名 > 検索値 (検索値より大きい)
フィールド名 < 検索値 (検索値より小さい)
フィールド名 >= 検索値 (検索値以上)
フィールド名 <= 検索値 (検索値以下)
2008-03-11
Tips140 - 中位○件のレコードを抽出 WHERE(TOP述語)
中位のレコードを抽出するにはサブクエリを使用します。
例えば、100人の得点から51位~60位のレコードを取得するには、
初めに下位50人を昇順で抽出し、その後10人を降順で抽出します。
初めの下位50人がサブクエリになります。
1 50 51 100
↓
51 100
↓
51 60
使用例:
20人の英語の得点から中位5人(11位~15位)を取得します。
SQL = "SELECT TOP 5 学生ID,英語 FROM 成績テーブル WHERE 学生ID=ANY (SELECT TOP 10 学生ID FROM 成績テーブル ORDER BY 英語) ORDER BY 英語 DESC"
例えば、100人の得点から51位~60位のレコードを取得するには、
初めに下位50人を昇順で抽出し、その後10人を降順で抽出します。
初めの下位50人がサブクエリになります。
1 50 51 100
↓
51 100
↓
51 60
使用例:
20人の英語の得点から中位5人(11位~15位)を取得します。
SQL = "SELECT TOP 5 学生ID,英語 FROM 成績テーブル WHERE 学生ID=ANY (SELECT TOP 10 学生ID FROM 成績テーブル ORDER BY 英語) ORDER BY 英語 DESC"
2008-03-07
Tips139 - 下位○件のレコードを降順で抽出 WHERE(TOP述語)
前回のTips138を実行すると、結果は昇順になりました。
例えば
学生ID 国語得点
8 15
2 25
5 50
のように国語得点は悪い順になっています。
これを得点の高いほうからソートし表示させるには、WHERE句にTOP句のサブクエリを使用します。
SQL = "SELECT 学生ID,国語 FROM 成績テーブル WHERE 学生ID=ANY (SELECT TOP 3 学生ID FROM 成績テーブル ORDER BY 国語) ORDER BY 国語 DESC"
これで実行すると
学生ID 国語得点
5 50
2 25
8 15
といい方から取得できます。
例えば
学生ID 国語得点
8 15
2 25
5 50
のように国語得点は悪い順になっています。
これを得点の高いほうからソートし表示させるには、WHERE句にTOP句のサブクエリを使用します。
SQL = "SELECT 学生ID,国語 FROM 成績テーブル WHERE 学生ID=ANY (SELECT TOP 3 学生ID FROM 成績テーブル ORDER BY 国語) ORDER BY 国語 DESC"
これで実行すると
学生ID 国語得点
5 50
2 25
8 15
といい方から取得できます。
2008-03-02
Tips138 - 下位○件のレコードを抽出(例:ワースト10) TOP述語
構文例
SQL = "SELECT TOP ○ フィールド名 FROM テーブル名 ORDER BY TOPで比較するフィールド名"
CurrentDb.Execute SQL, dbFailOnError
TOP述語を使うと指定数の下位レコードを抽出できます。
TOPの次に指定数をセットします。
上位を抽出する為には、「ORDER BY フィールド名」で昇順に並べ替えてください。
使用例
SQL = "SELECT TOP 3 学生ID,国語 FROM テーブル7 ORDER BY 国語"
国語の得点のワースト3を抽出し、その学生IDと国語の得点を取得します。
SQL = "SELECT TOP ○ フィールド名 FROM テーブル名 ORDER BY TOPで比較するフィールド名"
CurrentDb.Execute SQL, dbFailOnError
TOP述語を使うと指定数の下位レコードを抽出できます。
TOPの次に指定数をセットします。
上位を抽出する為には、「ORDER BY フィールド名」で昇順に並べ替えてください。
使用例
SQL = "SELECT TOP 3 学生ID,国語 FROM テーブル7 ORDER BY 国語"
国語の得点のワースト3を抽出し、その学生IDと国語の得点を取得します。
登録:
投稿 (Atom)