• 締切済み

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