• ベストアンサー

テーブルレーコードをソートして更新するにはどうしたらいいでしょうか?

社内向けシステムDBの更新作業を行っています。 システム上ではテーブルレコードがコンボボックスの形で 格納順に表示されてしまいます。 ただこの表示順がカテゴリー順になっていないのでとても選択しにくいです。 そこでレコードをカテゴリー順に並びかえテーブルを更新したい(SELECTで並び替えた状態で更新したい)のですがどうやればよろしいでしょうか?

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

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.2

まず大前提としてSELECTはorder by句でソート順を指定しないと順番は保証されません。 SQL Serverの場合、デフォルトだとプライマリーキー順にデータがソートされた状態で物理的に格納されます。なのでorder byを指定しないとプライマリーキー順で表示される場合が多いです。 プライマリーキーがないとインサート順で表示されているように見えることもありますが、保証された動きではありません。SQLの実行計画次第で変ります。 なのでSELECT時にORDER BY句でソート順を指定するのが正しいです。 abc123等の並びででソートできないような内容の場合は、ソート用の項目を作成することもあります。

sugomori
質問者

お礼

アドバイス頂きありがとうございました。 自己解決いたしました。 SELECTで抽出した内容をINSERTでsql保存しておき、全行デリートしてからsqlを実行で順番の更新ができました。

sugomori
質問者

補足

回答ありがとうございます! 説明が大分たらなかったので補足させていただきます。 今編集しているのは主キー(数値:順に振っているだけのコード)と名称という列しかないテーブルです。 ただ、この主キーがメインテーブルのフォーリンキーとしてリンクしているため編集テーブル上の主キーをいじれない状態です。 現在は編集テーブル上の主キー順にレコードが並んでおり、その順番通りにブラウザのプルダウンに名称が表示されてしまいます。 名称には相関性がありますので、ユーザーが選択しやすいように名称の順にテーブルのレコードをソートし更新してプルダウンに反映させたいと考えているのですが、可能でしょうか?

その他の回答 (2)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

#1です。 SSMSでテーブルを直接開いて編集しているのであれば、 ツールバーから「抽出条件ペインの表示」を選んで、たとえば以下のように条件を指定し、実行すれば並び順を希望のものにしたまま編集できます。

sugomori
質問者

お礼

アドバイス頂きありがとうございました。 自己解決いたしました。 SELECTで抽出した内容をINSERTでsql保存しておき、全行デリートしてからsqlを実行で順番の更新ができました。

sugomori
質問者

補足

ご回答ありがとうございます! SELECT文で希望の並び順で抽出したままの順番でテーブルを更新したいのですが、無理でしょうか?

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

そもそもの部分が書かれていないとわかりませんね。 ・SQL Serverの話ですか?であればバージョンは? ・EnterpriseManagerやSQL Server Management Studioで更新しているのですか?  それともAccessやVBによるアプリケーションを使って更新しているのですか? ・後者だとすれば、どんなインターフェースのどんな画面なのですか?  (コンボボックスには何が表示されていて、選んだあとどうやったら更新される画面なのですか?)  そしてそのソースを変更する権限は質問者さんにはあるのですか?

sugomori
質問者

補足

SQL Server2005でSQL Server Management Studioで更新を行っております。 コンボボックスうんぬんはテーブルを参照して表示する ブラウザでの話ですので関係なかったですね。 SQL Server Management Studioでテーブルのレコード順を並び替えて 更新したいということです。

関連するQ&A

  • Access2010 更新データ反映のレポート印刷

    質問の仕方が悪かったようなので、もう一度質問いたします。 Access初心者です。 新規データを入力しても、レポートが更新されずに困っています。 エクセルデータをAccess2010にインポートして、元テーブルを作成しました。 元テーブルを元に、フォーム・レポート・検索クエリ(年度別・分類別)等を作成しました。 データが入力されているテーブルは、この元テーブルのみです。それ以外のテーブルはありません。従って、全てのクエリは、この元テーブルを元に作成しております。 フォームを作成しているときに、コンボボックスを作成し、コンボボックスのコントロールソースは、全て、その場で作成しました。(コンボボックス用のテーブルは作成していない) また、郵便番号から住所を入力できるように設定してあります。 ここまでの作業で、新規データの入力はありませんでした。 ところが・・・ 新規データをフォームに入力すると、元テーブルは更新されますが、元テーブルを元に既に作成しているレポートには、新規レコードが表示(反映)されません。 しかし、レポートフッターに設定してある「Count(*)」は、新規レコードを含んだ数字を返しています。 更新されている元テーブルを元に、もう一度レポートを作成しなおしても、新規レコードは表示されません。 ホームタブの「全て更新」ボタンをクリックしても、新規レコードはレポートには表示されません。 どうしたらよいのでしょうか??? どなたか、初心者でもわかるように、教えていただけないでしょうか? 宜しくお願いいたします。

  • テキストボックスとコンボボックス

    こんにちは、Accessのフォームにテキストボックスとコンボボックスを設置して、以下のような事ができないかと悩んでおります。 フォーム内には、テキストボックスとコンボボックスが設置してありまして、コンボボックス内にDB(会社名テーブル)から取得した全ての会社名が入っています。 しかし、そのレコード数が300件近くあるため、コンボボックス内から探し出すのに手間が掛かります。 そこで、コンボボックスの隣にテキストボックスを設置し、テキストボックス更新後に会社名テーブルの検索を行い、条件に合った会社名だけをコンボボックス内に入れることを考えているのですが、上手く行きません。 動作のイメージとしては下記のようになります。 (1)初期表示時はテキストボックス内に何も入力されていないので、全レコードがコンボボックス内に表示される。 (2)テキストボックスに「有限」と入力して、テキストボックスからフォーカスを移動させると、コンボボックス内に「有限」が会社名に含まれているレコードのみが入っている。 (3)テキストボックスを空白に戻すと、コンボボックス内には全レコードが表示 以上、どなたかご教授よろしくお願いします。

  • テーブルで一番古いレコードだけをSELECTしたい

    テーブルで一番古いレコードだけをSELECTしたいのですが、どうすれば良いでしょうか? ■背景 ・テーブルからデータを取得しようと思ったら、「id」及び「autoincrement」に該当するカラムがありませんでした ・日付に該当するカラムもありません ・「phpMyAdmin」で確認すると、いつも同じ並び順で表示されるので、格納したレコード順で表示されているのではないかと思いました ■質問 ・この時、そのテーブルで一番古いレコードだけをSELECTしたいのですが、どうすれば良いでしょうか? ・where?

    • ベストアンサー
    • MySQL
  • Accessの更新クエリについて質問です。

    よろしくお願いします。 集計したクエリを元に更新クエリを実行すると、更新できません。 やりたい作業としては、売上データテーブルのレコード数を得意先ごとにカウントして、得意先マスタテーブルのレコード件数フィールドを更新する作業です。 追加クエリで一度テーブルに追加してから、テーブル同士で更新も考えたんですが、レコード数が多いためにDBのサイズが爆発的に増えて廃案になりました。 何か良い方法があれば教えてください。

  • DBをまたいで更新

    現在、testDB1とtestDB2というDBが存在します。 それで、testDB1のtable.idとtestDB2のtable2.idを SELECT文で比較して、同じidの場合はtestDB2のtable2.dataに 1という値を格納したいと思っています。 それで、DBをまたいで更新するときの記述が分からず ネットで検索したのですが、うまくヒットしませんでした。 そもそもDBをまたいで問い合わせや更新等はできないのでしょうか? できない場合、代替の方法があったら教えて頂けますでしょうか。 よろしくお願い致します。

  • コンボボックスの自動更新について

    コンボボックスの自動更新について エクセルのVBAで、ユーザーフォームを使用しています。 ユーザーフォームの中には「入力」ボタンとコンボボックスと テキストボックスがあります。 コンボボックスは、「ABCDEF」と6つのリストがあります。 ユーザーフォーム起動時には、コンボボックスは空欄で コンボボックスから、入力したい商品を選んで、入力ボタンを押して コンボボックスとテキストボックスの内容を入力・コンボボックスを 空欄に戻しています。 これを、「A」を選んで入力ボタンをおしたら「B」が選ばれる。 「B」を選んで入力ボタンをおしたら「C」が選ばれるといったように コンボボックスに表示されるリストを自動で更新することは できないでしょうか? Select case などを利用して組み立てようとしたのですが、 数時間以上調べても出来ません。 教えていただけると助かります。

  • JSPでのリストボックス表示

    いつもお世話になっております。 サーブレット&JSPでプログラミングの勉強をしています。 JSPでリストボックスを表示させる際に、リストのアイテムをハードコーディングではなく、DBから取得したデータをArrayList等に格納し、表示させたいと思っています。 この場合、ループでArrayListのアイテムを1件ずつ取り出して、JSP内の<select><option></option></select>に当て込む方法が良いのでしょうか? ちなみに以下のテーブル内容で、リストボックスには“作業内容”を表示させて、選択されたときには、“作業コード”を取得させたいのですが、どのようにすれば良いでしょうか? テーブル -------------------- 作業コード|作業内容 -------------------- 0000000001|プログラミング 0000000002|実装 0000000003|テスト よろしくお願いします。

    • ベストアンサー
    • Java
  • マスタデータ更新

    こんにちは。 システム開発の基礎的なところがわからないので、教えていただきたく、投稿させていただきます。 システム開発をほとんどやったことがないので、言葉が変なところもあるかと思いますが、宜しくお願いいたします。 サーバー上に、AというSQLServerのDBがあります。 今までは、システム管理者のみがAccessからA.DBのリンクテーブルを使い、マスタデータの更新/追加/削除を行っていましたが、今後、リーダークラスの人もできるようにしたい!という要望があり、そのインターフェース部分を作成しています。 いろいろと考え、フロントエンド側にAccessでB.mdbを作成し、そこには、A.DBと同じテーブル構造の一時TBLを作成し、B.mdbを開いた時にA.DBから全データを取得することにしました。(取得するところまではできています) ここから、設定するための画面作成をしますが、最終的に、更新/追加/削除されたデータは、どのようにA.DBにUPすればいいのでしょうか? 考えた方法として (1)B.mdb内に、一時テーブルとは別に、更に同じ構造の変更用テーブルを作成。 設定画面から更新/追加/削除されたデータは変更用テーブルに保存し、全ての処理が終了したら、変更用テーブルにあるデータを1つづつ見て、A.DBへ更新/追加/削除をかける (2)一時テーブルのデータを直接更新/追加/削除し、全ての処理が終了したら、全テーブルのレコードを1件づつ比較し、A.DBへ更新/追加/削除をかける というくらいしか思いつかないのです。 その他に思ったのが、一時テーブルもしくは変更用のテーブルに、レコード毎に「更新/追加/削除」がわかるようにフラグを設けて、そのフラグに従ったSQL文を発行する というくらいです。。。 根本的に、マスタデータに対する更新/追加/削除のやり方が間違っていたりしますか? 誰も聞ける人がいないので、どうぞ宜しくお願いいたします!!!

  • レコード内容からテーブル特定

    Oracleのデータ更新について質問させてください。 SQL文で、ある文字列を含むレコードデータを持つ、テーブルおよびレコード名を知る方法はありますでしょうか? 具体的には、DBに登録されている"google.co.jp"という文字列を"yahoo.co.jp"という文字列に全てupdateしたいのですが、 "google.co.jp"という文字列は複数のテーブルの不特定のレコードに格納されています。 全てのテーブルを1つ1つselectで見ていくしか方法は無いのでしょうか?

  • accessのレポートで…

    レポート(テーブル1から作成)にあるフィールド1には「1・2・3…」という数字が入っています。 この1・2・3はテーブル2(ID・名前)とリンクしています。 フォーム上ではコンボボックスにして、テーブル2の名前も表示するようになっています。 (テーブルに値としては入っていません) これでレポートを作成した場合、テーブル2の名前を表示させたいのですが、テキストボックスで Iif([フィールド1] = "1","****",Iif(… というようにしてしまうと、せっかくリンクにしたのにデータが固定になってしまうのを避けたいんです。 フォームだとコンボボックスの更新後処理とレコードの移動にコードをかけば最新の情報を表示することができたんですが、レポートでもこのようなことはできるんでしょうか? (コードをかいて処理したいです) Access2000です。 よろしくお願いします。