Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1099 / 2272 ツリー ←次へ | 前へ→

【8790】順不同に並び替え apple 06/11/14(火) 17:36 質問[未読]
【8791】Re:順不同に並び替え 飛ばない豚 06/11/14(火) 19:00 発言[未読]
【8795】Re:順不同に並び替え apple 06/11/15(水) 15:04 お礼[未読]
【8797】Re:順不同に並び替え 飛ばない豚 06/11/15(水) 15:49 発言[未読]
【8798】Re:順不同に並び替え apple 06/11/15(水) 16:47 お礼[未読]
【8793】Re:順不同に並び替え Gin_II 06/11/15(水) 8:48 回答[未読]
【8796】Re:順不同に並び替え apple 06/11/15(水) 15:09 お礼[未読]

【8790】順不同に並び替え
質問  apple  - 06/11/14(火) 17:36 -

引用なし
パスワード
   200万件程のデータに、乱数をつけて順不同に並び替えたいです。
以下の様に、クエリーで乱数作成を試してみましたが、すべて同じ乱数値となってしまいました。

SELECT テーブル1.フィールド1, Rnd()AS rd
FROM テーブル1

ユニークな乱数を作成し、並べ替えるにはどのようにしたら良いですか?
教えてください。
よろしくお願いいたします。

【8791】Re:順不同に並び替え
発言  飛ばない豚  - 06/11/14(火) 19:00 -

引用なし
パスワード
   ▼apple さん:

Rnd()は、ランダムな値を返す関数です。
よって全ての値がユニークになるとは限りません。

それを踏まえた上で、

SELECT テーブル1.フィールド1, Rnd([テーブル1.フィールド1]) AS rd
FROM テーブル1

としてみて下さい。(rdには同じ値もあるかと思います)


完全にユニークにしたいのであれば、
レコードセットを使って、1件ずつ更新していくしかないかと思います。

乱数発行 --> 確認 --> その値が既に使われていれば、再度乱数発行、
使われてなければ、更新

という具合に。


ランダムに並べ替えたいのであれば、上記のクエリで十分かと思います。

SELECT テーブル1.フィールド1,
Rnd([テーブル1.フィールド1]) AS rd,
Rnd([テーブル1.フィールド1]) AS rd2
FROM テーブル1
ORDER BY Rnd([テーブル1.フィールド1]),
Rnd([テーブル1.フィールド1])

ここまでやれば、さらに完璧!?


参考までに。(^・ω・^)

【8793】Re:順不同に並び替え
回答  Gin_II  - 06/11/15(水) 8:48 -

引用なし
パスワード
   >200万件程のデータに、乱数をつけて順不同に並び替えたいです。

オートナンバー型を利用する方法もありますね。
オートナンバー型ではランダムな値を指定することができます。

【8795】Re:順不同に並び替え
お礼  apple  - 06/11/15(水) 15:04 -

引用なし
パスワード
   飛ばない豚さん

アドバイスありがとうございます。
両方のクエリを実行し勉強させていただきました。
乱数作成はうまくいきました。
ただ、乱数を昇順に並べ替えてみたところ、昇順に並んでいないのです。
フィールドがテキスト型だからでしょうか?

【8796】Re:順不同に並び替え
お礼  apple  - 06/11/15(水) 15:09 -

引用なし
パスワード
   Gin_II さん

こんにちは。
アドバイスのように、オートナンバー型を利用すれば手間がかからずに簡単に
ユニークな乱数が発行できるんですね。
参考にさせていただきます。
ありがとうございます。

【8797】Re:順不同に並び替え
発言  飛ばない豚  - 06/11/15(水) 15:49 -

引用なし
パスワード
   ▼apple さん:
> ただ、乱数を昇順に並べ替えてみたところ、昇順に並んでいないのです。
> フィールドがテキスト型だからでしょうか?

並べ替えても、開くときに再度乱数が発行される為、
並びの順とは一致しないのだと思われます。

なので、クエリを開くたびに並び順も変わっているかと思います。


「ランダムに並べ替える」事を目的とするのであれば、
あまり気にする必要もないかと思います。
(私の勝手な推論ですが)

並べ替え結果を保管しておくのであれば、結果表示の前に
一旦別テーブル等に保存するか、または、Gin_IIさんの
方法を用いると良いです。

それでは

【8798】Re:順不同に並び替え
お礼  apple  - 06/11/15(水) 16:47 -

引用なし
パスワード
   飛ばない豚さん

的確なアドバイスで、昇順に並ばない意味がようやく納得できました。
確かに、今回は「ランダムに並べ替える」事を目的とするので、
これで問題なく処理ができそうです。
ありがとうございました。

1099 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078212
(SS)C-BOARD v3.8 is Free