プロが教えるわが家の防犯対策術!

SQL Server 2008 R2 Visual Studio 2008

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

テーブルAのようなデータがあり、実際には、場所のNo.の数は500点くらいあります。
このデータをSQL to LINQでデータの追加、参照をしたいと思っています。

テーブルA,B、どちらの形式で設計する方がよいのでしょうか。

テーブルAの場合は、見た目がそのままで分かりやすいのですが、データ追加時(INSERT)に多数のデータを
追加する方法が分かりません。

テーブルBの場合は、テーブルAの形式で取得する場合、どうすればよいのか分かりません。

ここから先に進めず困っております。よろしくお願いします。


テーブルA
日付No.1No.2No.3No.4No.5
2011/1/1068374138
2011/1/236036946
2011/1/32289631477
2011/1/4758554641
2011/1/5639212690
2011/1/66123774293
2011/1/75452364441
2011/1/87298306648
2011/1/9203891559


テーブルB
日付場所線量
2011/1/1No.10
2011/1/1No.268
2011/1/1No.337
2011/1/1No.441
2011/1/1No.538
2011/1/2No.13
2011/1/2No.260
2011/1/2No.33
2011/1/2No.469
2011/1/2No.546

A 回答 (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])
)

この回答への補足

回答ありがとうございます。

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

補足日時:2011/05/19 16:33
    • good
    • 0

よくわからんのですが・・


要は日付と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で絞り込んだり集計したりお好きなように。
最終的にどうデータを取りたいのか、どう管理したいのかが、よくわからんので適当な回答ですが、すいません

この回答への補足

早速の回答、ありがとうございます。
データベース始めたところなので、助かります。

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

補足日時:2011/05/19 12:21
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!