Tips

セレクションから重複したレコードを取り除く

日付2002/05/17
ID01-906
バージョン6.5.x , 6.7.x, and 6.8.x
プラットフォームWindows and Mac OS

セレクションから重複したレコードを取り除く一つの方法として、セットを使う方法があります。下記のメソッドはその例です。テーブル名とフィールド名をあなたのデータベースに合わせて書き替えれば、そのまま流用可能です。
もし、セレクションのレコードだけを対象にしたいのであれば、ALL RECORDSの行を省略すれば良いでしょう。


` ダブりレコードのための空セットを作ります
CREATE EMPTY SET([Table 1];"Duplicates")

`この処理をレコード全件を対象に行います。
`もし事前に作成されたカレントセレクションを処理対象にしたい場合はこの行を削除してください。

ALL RECORDS([Table 1])

` 処理対象レコード全てを含んだセットを作成
CREATE SET([Table 1];"AllRecords")

` レコードをソートします
` ダブったレコードを隣り合わせに配置するためです。

ORDER BY([Table 1];[Table 1]Field1;>;[Table 1]Field2;>;[Table 1]Field3;>)

` 一つ前のレコードのフィールド値を保持するための変数を初期化します
$Field1:=[Table 1]Field1
$Field2:=[Table 1]Field2
$Field3:=[Table 1]Field3
` 2番目のレコードへ移動させておきます
NEXT RECORD([Table 1])

For ($i;2;Records in selection([Table 1]))
` 全部のレコードを順次比較していきます。
` もしField1, Field2, Field3 が直前のレコードと同じなら
` それはダブリレコードです。

If (([Table 1]Field1=$Field1) & ([Table 1]Field2=$Field2) & ([Table 1]Field3=$Field3))
` カレントレコード(重複レコード)をセットへ記録
ADD TO SET([Table 1];"Duplicates")
Else
` 次のレコードとの比較のためにField1, Field2, Field3の値を変数へ保存
$Field1:=[Table 1]Field1
$Field2:=[Table 1]Field2
$Field3:=[Table 1]Field3
End if
` 次のレコードへ移動
NEXT RECORD([Table 1])
End for

DIFFERENCE("allRecords";"Duplicates";"ResultSet")

USE SET("ResultSet") `ダブっていないレコードだけをセレクションする

` 処理終了につきセットを消去
CLEAR SET("Duplicates")
CLEAR SET("allRecords")
CLEAR SET("ResultSet")