• 締切済み

SQL Server テーブル設計で悩んでいます。

SQL Server 2008 R2 Visual Studio 2008 テーブルの設計で悩んでいます。 テーブルAのようなデータがあり、実際には、場所のNo.の数は500点くらいあります。 このデータをSQL to LINQでデータの追加、参照をしたいと思っています。 テーブルA,B、どちらの形式で設計する方がよいのでしょうか。 テーブルAの場合は、見た目がそのままで分かりやすいのですが、データ追加時(INSERT)に多数のデータを 追加する方法が分かりません。 テーブルBの場合は、テーブルAの形式で取得する場合、どうすればよいのか分かりません。 ここから先に進めず困っております。よろしくお願いします。 テーブルA 日付 No.1 No.2 No.3 No.4 No.5 2011/1/1 0 68 37 41 38 2011/1/2 3 60 3 69 46 2011/1/3 22 89 63 14 77 2011/1/4 75 8 55 46 41 2011/1/5 63 92 1 26 90 2011/1/6 61 23 77 42 93 2011/1/7 54 52 36 44 41 2011/1/8 72 98 30 66 48 2011/1/9 20 3 89 15 59 テーブルB 日付 場所 線量 2011/1/1 No.1 0 2011/1/1 No.2 68 2011/1/1 No.3 37 2011/1/1 No.4 41 2011/1/1 No.5 38 2011/1/2 No.1 3 2011/1/2 No.2 60 2011/1/2 No.3 3 2011/1/2 No.4 69 2011/1/2 No.5 46

みんなの回答

回答No.2

PIVOT使ってできそう。 実行してないから、エラーになったらゴメン。 SELECT 日付, [No.1], [No.2], [No.3], [No.4], [No.5] FROM ( SELECT 日付, 場所, 線量 FROM テーブルB ) T PIVOT ( SUM(線量) FOR [日付] IN ([No.1], [No.2], [No.3], [No.4], [No.5]) )

jiioi
質問者

補足

回答ありがとうございます。 PIVOTで出来ました! ただ、テーブルBからテーブルAにするのは、時間がものすごく掛かることが分かりました。 テーブルAで設計しようと思います。 そこで、INSERTの方法が分からないですが、 場所はNo.1~No.500あるとします。 datetimeの変数と要素数500の配列のようなものをインサートする方法などあるのでしょうか? 500個の場所のパラメータを用意するとできるのでしょうが、もっといい方法はあるのでしょうか? よろしければおしえてください。

  • kool_noah
  • ベストアンサー率33% (95/285)
回答No.1

よくわからんのですが・・ 要は日付とNo.(場所?)とそのNoの線量のデータを扱いたいってことですよね? で、テーブルAの 日付 No.1 No.2 No.3 No.4 No.5... だと、わかりやすいけど、Noが500ぐらいあるから横に長くなると なので、テーブルBみたいな案を考えたけどどっちがいいですか?ってことですか? No.が500で打ち止めなら別にAでいいような気もしますけど、無駄に横にながくなりますけどね。 1レコード1Noでもいいのでは? PK No.   線量 日付 1  No.1  100  2011/1/1 2  No.1  110  2011/1/1 3  No.2  120  2011/1/1 4  No.3  130  2011/1/1 5  No.3  140  2011/1/2 で、取得する際に日付とかNoで絞り込んだり集計したりお好きなように。 最終的にどうデータを取りたいのか、どう管理したいのかが、よくわからんので適当な回答ですが、すいません

jiioi
質問者

補足

早速の回答、ありがとうございます。 データベース始めたところなので、助かります。 >1レコード1Noでもいいのでは? 私も、正規化というのを知り、その方がいいのかなと思ったのですが、 テーブルBからテーブルAにする仕方がどうしても分かりませんでした。 INNER JOIN というので、結合していくにしても、数が多すぎて現実的ではありません。 なにかいい方法がありますでしょうか。

関連するQ&A

  • SQL文でテーブルを作りたいのですが・・・

    テーブルを作りたいのですが、思い描くテーブルが作れず、困っています・・・ 例えばMさんがA→B→C→Dと旅行に行ったとします。 そのとき、行った場所によって日付が登録されるようにしたいと思っています。 このように、別な人もいろいろと旅行し、それぞれの日付があり、どんどんと格納していきます。 最初に ID id 日付 date 場所 point (名前はとりあえず、IDとします) でテーブルを作ろうとしましたが、これだとID一つにつき、日付と場所も一つずつしか入りませんよね? どういったテーブルを作ればいいでしょうか? 思い描くテーブルは下記のような感じです。 ID     日付      場所 -------------- 1  |2010/10/06 |  A   |2010/10/14 |  B   |2010/10/20 |  C   |2010/10/25 |  D -------------------------- 2  |2010/10/23 |  B    |2010/10/24 |  A    |2010/10/25 |  D    |2010/10/27 |  C -------------------------- 3  |2010/10/25 |  D    |2010/10/27 |  C    |2010/11/03 |  B    |2010/11/04 |  A    |2010/11/07 |  D    |2010/11/10 |  C ------------------------- 4  |2010/11/10 | B    |2010/11/15 |  A    |2010/11/16 |  D ・・・・・・・・・・・・・・・ このように一つのIDに対して、日付と場所がランダムの数で格納したいのですが、これって可能でしょうか? テーブルを2つ(以上)作り、外部キーを使ってもかまいません。 また、足りなければ違うIDなどでカバーしてもかまいません。 実際は、このようなテーブルを作り、一人毎の動線を調べるために活用したいと思っています。 Mさん:今日はAに行って、明日はBに行き、明後日はCに行った。すなわち動線は・・・のような感じです。 SQL文でテーブルを作ってください。 補足事項等ありましたらご指摘下さい。追加いたします。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • テーブルのマッチングについて

    ORACLE10gを使用しています。 AとB同じレイアウト(キーも同じ)のテーブルがあります。 この2つのテーブルを比較して、 (1)Aテーブルのみにあるもの:1レコードCテーブルに追加 (2)Bテーブルのみにあるもの:1レコードCテーブルに追加 (3)A、B両方にあるもの:2レコードCテーブルに追加 上記に該当するレコードをCテーブルにINSERTしたいです。 実は、Cテーブルに項目が1つ追加されまして「区分」を書く必要があります。 どのパターン((1)か(2)か(3))でINSERTしたデータかです。 (1):1、(2):2、(3):3をセットする どのようにSQLを作成すると実現できるのでしょうか? ご指導よろしくおねがいします。

  • SQLサーバでテーブルをコピーする

    SQLサーバ超初心者です。 A支店用のテーブルを作成(dbo.data_A)したのですが B支店(dbo.data_B)、C支店用(dbo.data_C)のテーブルを作成したいです。 Accessなどのように、コピーペーストなどはできないのですよね? ご教授お願いいたします!

  • SQLについて質問です。

    今あるテーブル1のカラムA(number型)と 全く同じテーブルにあるカラムB(varchar型)を つなげて (number型) IS (varchar型) A IS B … のように真ん中に『IS』を挟んで データを全て出したいのですが、 SQLの書き方がよくわかりません。 自分では select A ||'(' || IS || ')'|| B from table1 のように書くのでは?と思っていますが、 全く上手くデータをこの形で出すことができません。 このデータを出すためには どういったSQLを書けばよろしいのでしょうか? よろしくお願いします。

  • テーブルのマージSQLに関して

    初歩的なSQLの質問で申し訳ありません。 以前にも同じような内容で投稿させて頂きましたが、教えて下さい。 下記のような、ある異なる名前の同項目を持つ2つのテーブルが存在します。 《テーブル》 Aテーブル   社員番号、日付、内容、所属、時間、結果 Bテーブル  社員番号、日付、内容、理由  ※ 内容に関しては、AテーブルとBテーブルで全く違います。 これらの2つのテーブルをマージさせ、社員番号毎の内容毎、日付順に したいと考えています。 以前に以下のようなUNIONを教えてもらいましたが、所属、時間、結果、理由という 項目全てを出力するとした場合、どのように記載すれば良いでしょうか? UNIONの場合、項目が異なるとエラーとなってしまうかと、、、 《UNIONのSQL》 SELECT * FROM ( SELECT 社員番号, 日付, 内容 FROM Aテーブル UNION SELECT 社員番号, 日付, 内容 FROM Bテーブル ) ORDER BY 日付, 社員番号, 内容 教えて下さい。 よろしくお願いします。

  • SQL設計について

    すみません、質問です。 SQLのテーブル設計を行う際の質問です。 独学で行っている為、設計の際スタンダードな方法をご教授願いたく登校しました。 本題ですが ウェブアプリケーションでSQLに打ち込まれたデータを参照するシステムの場合です。 ある団体でのボクサーの成績情報を登録するとして 参照する際に以下の情報が必要になるとします。 個人の勝ち数,負け数,引き分け数,年齢,経歴や 対戦者別の成績などです この時別テーブルにて対戦情報を入力していた場合、 勝ち数や負け数はプログラム部分の計算式で算出可能ですが、それでもテーブルには入力した方がいいものでしょうか? 端的には、アップデートやインサート文が増えるのを選ぶか、SELECT文の簡易さを選ぶというかという点になるかと思っているのですが、 サーバーへの不可などを鑑みて、スタンダートな理解があればご教授下さいませ。

    • ベストアンサー
    • MySQL
  • テーブルの中身を違うテーブルへコピー

    お世話になります。 SQLについて質問があるのですが・・・。 Aというテーブルがあり、何件かデータが入っています。 そのAテーブルにフィールドを2つ新たに追加したいのです。 ALTER TABLEは使わずに、 以下の様な操作をしたいと考えております。 1:Aテーブルを違う名前に変更。  もしくはテーブルを丸々コピー。 2:テーブルBを作成。   (テーブルAのフィールドに2つフィールド追加した内容) 3:テーブルBにテーブルAの内容を丸々コピー。   その際、新規に追加した2つのフィールドには、初期値として、何かの文字or数字を入れる。 4:Aテーブルを削除 と、いう感じです。 作成はINSERT、削除はDROPを使えばいいのかなーって 思っているのですが、 テーブル名の変更や、テーブルの内容のコピーが ちょっと分かりません。 上記について、ご教授の程、よろしくお願いします。 なお、DBにはSQL Serverを使用しています。

  • SQL について教えて下さい

    ---------------------------------------- テーブルAの カラム1、カラム2のデータが 10、作業A 20、作業B 30、作業C ---------------------------------------- テーブルBの カラム1、カラム2のデータが 10、2013/1/1 10、2013/2/1 20、1999/1/1 20、1999/2/1 ---------------------------------------- のようなデータがあります テーブルA、テーブルBのカラム1はリレーションです この2のテーブルから、テーブルBの最新日付の カラム1のグループ毎に選択するSQLを教えて下さい ---------------------------------------- 結果 10、作業A、2013/2/1 20、作業B、1999/2/1 ---------------------------------------- select テーブルA.カラム1,テーブルA.カラム2,テーブルB.カラム2 で、条件をどうしたら、テーブルBの最新日付を取り出せますか

  • SQL Server2000のテーブルのデータ型

    SQL Server2000のテーブルのデータ型には、自動でインクリメントされる整数型(Accessでいうところのオートナンバー型)が見当たらないのですが、無いのでしょうか? 何か別の操作で出来るのですか? よろしくお願いします。

  • SQLの書き方について教えてください。

    SQL Server2000で下記のようなSQL文を書きたいと思っています。 テーブルAとテーブルAに無関係な2個のフィールドを 持つテーブルBがあり、テーブルAのデータをテーブルBにコピー したいと考えています。その際にテーブルBの2個のフィールドに対して 決められた値を挿入したいのですがどのように記述すればよいのか わかりません。 お分かりの方お教えいただけませんでしょうか よろしくお願いいたします。 下記の記述をしています。 INSERT INTO テーブルB ( A, B, C, D ) SELECT テーブルA.A, テーブルA.A, XXX1, XXX2 FROM reserveSETdateTRN; Cに東京 Dに品川 を入れたいと思っています