• ベストアンサー

ACCESS クエリーでソートの不具合

ACCESS2000 ACCESS クエリーでソートの不具合 Xテーブル 品コード 明細番号 昇順   昇順 作成したテーブルを見ると一部 111 01 111 02 111 03 222 01 333 01 111 04 <=分かれて表示されている。 データは3000件程あるのですが、アクセスの不具合? データはグループでは集計されるのでヌルが入っていたりはしません。 体験のある方いらしゃいますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • yu_tang
  • ベストアンサー率81% (26/32)
回答No.4

ご質問の内容が不明瞭ですので、ある仮定に基づいて回答してみます。 テーブル [商品マスタ] から select into でワークテーブル [workDB] を 作成した。テーブル [workDB] を直接開くと、select into に指定した order by の順にレコードが表示されないが、なぜか? 上記の仮定が正しくなければ、以下の回答はスルーしてください。 上記の仮定が正しければ、それは不具合ではありません。 Access(に限らず多くの RDB)ではごくふつうの現象です。 データの入力順と格納順は必ずしも一致しません。それが利点なのです。 入力した順(この場合は select into に指定した order by の順)と関係 なく、データは空きブロックに配置されていきます。だからこそ、Access は ディスクを効率的に使用できるのです(Access にはありませんが、サーバ 製品によっては何かの理由で物理ディスク上に順番に格納したい場合のため にそれ用のオプションが用意されている場合があります。逆に言うと、 ふつうは特別にオプション指定でもしない限り、入力順に物理格納されたり はしません。効率が悪いからです)。 ソートが重要なら、(入力時ではなく)参照時にクエリで order by 指定 しましょう。テーブルの格納順をあてにすべきではありませんし、テーブル を直接開いて順番がどうなっているのか気にすべきでもありません(もし それが気になるなら、RDB ではなく Excel のような表計算ソフトを使った ほうが、たぶん精神衛生上は よいでしょう)。 ちなみに Access の場合は、主キーが設定されているテーブルであれば、 一応 主キーの順番に表示されることにはなっています。select into で 作成されるテーブルに主キーはありませんから、その場合の表示順は不定 です。 もし主キーがないのに入力順(追加順)にレコードが表示されたとしたら、 運よく連続する空き領域を確保できた場合、ということになります。この ラッキー(?)は、入力(追加)するデータが多ければ多いほど、そして ディスクの断片化が進んでいれば進んでいるほど、起こりにくくなります。

UKUJIMA
質問者

お礼

ご回答、ありがとうございます。出力側のレコードがソート順にならばないのですね。 今後、注意します。

その他の回答 (4)

  • nda23
  • ベストアンサー率54% (777/1416)
回答No.5

テーブルを単にデータシートビューで開いてもコードの昇順に表示 されるとは限りません。「テーブルを作る時のSELECT INTOでORDER BY したじゃないか」というのは人間の都合で、ORDER BY されたのは元に なるテーブルが一時的に並べ替えられただけです。 データシートビューにはテーブル毎に独自の書式(列幅、並び順)が 記録されます。掲題の例では品コード、明細番号の2列を選択し、 メニューバーから「レコード→並べ替え→昇順」と設定します。 ビューを閉じる時には変更を記録するかどうか問合せがあります。 但し、SELECT INTO を再実行すると、テーブルは削除→作成となる ため、同じテーブル名でも表示形式はリセットされます。 希望の並び順になるようなクエリを作成し、そちらを開く方が話が 簡単です。

UKUJIMA
質問者

お礼

ご回答ありがとうございました。 出力ファイルも並び変えるということですね。

  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.3

補足ありがとうございました。 >SELECT 商品マスタ.品コード, 商品マスタ.明細番号 INTO workDB >FROM 商品マスタ >ORDER BY 商品マスタ.品コード, 商品マスタ.明細番号; >データの型はテキストです。 この内容を拝見する限り、問題の状態になる要素はないと思いますので 解決策が解りかねます。 テキスト型の場合、半角全角が混ざっていても ACCESSの場合 逆に同一視されて識別できない事が よく問題なります。 お書きになったSQLからは、別れて並んでしまう点が不明です。 お力になれず、申し訳ありません。

noname#110201
noname#110201
回答No.2

数字が全角文字で入力されているということはありませんか?

UKUJIMA
質問者

お礼

ご回答ありがとうございます。 データを111を選択して表示すると4件でてくるので同じデータです。

  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.1

そのクエリーを SQLビューで表示したテキストで 補足してください。 プラス、品コードと明細番号のデータの型を。

UKUJIMA
質問者

補足

SELECT 商品マスタ.品コード, 商品マスタ.明細番号 INTO workDB FROM 商品マスタ ORDER BY 商品マスタ.品コード, 商品マスタ.明細番号; データの型はテキストです。 遅くなりました。 ご回答ありがとうございます。

関連するQ&A