- ベストアンサー
結合? コピー? 初歩的な質問ですが
プログラミングを始めたばかりの初心者ですが、教えてください。 1から1万までのデータ、たとえばその年の納税額ランキングの1位から1万位の氏名だけのデータがあるとします。それを単純に10年分並べたカラムが10の表をつくりたいのですが、どのようにしたら一番速くなるのでしょうか。 エクセルなら単純にコピーしたらよいのですが、各年の1位から1万位を結合したら(私のやり方が間違っているのかもしれませんが)とても時間がかかります。何卒お願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ってことは総じてこんな感じでしょうか? table1 rank person 1 Aさん 2 Bさん 3 Cさん table2 rank person 1 Bさん 2 Cさん 3 Aさん table3 rank person 1 Cさん 2 Aさん 3 Bさん これを一覧にするのであればtable1のrankフィールドをベースに こんな感じで・・・ SELECT t1.rank,t1.person,t2.person,t3.person FROM table1 as t1 INNER JOIN table2 as t2 ON t1.rank=t2.rank INNER JOIN table3 as t3 ON t1.rank=t3.rank
その他の回答 (4)
- yambejp
- ベストアンサー率51% (3827/7415)
たびたび申し訳ないです 通常このようなやり方をする場合ランキング用のフィールド(1~1万までの連番)が あるとおもいますが本当に名前だけなのですか? SQLではデータの格納順に表示されることは保証されていません。 なので名前だけが羅列されているだけではランクを表すことに使えません。 (仮に順番がかわらないように見えてもそういうものではないのです) なので、今のままの命題では10年分のランキングを横方向に羅列することは 困難です。 ランク用のフィールドもしくは序列をつけるようなデータがあるのであれば その辺の構造がわかるような補足が必要になります
補足
すみません。ランキング用のフィールドはあります。 よろしくお願いします。
- yambejp
- ベストアンサー率51% (3827/7415)
もう一個、 10年分のデータはテーブルが分かれているのでしょうか? それとも一つのテーブルに年を明示するフィールドが存在するのでしょうか?
補足
早速ありがとうございます。 10年分のデータはテーブルが分かれています。 10のテーブルで、各テーブルのカラムは1です。 よろしくおねがいします。
- yambejp
- ベストアンサー率51% (3827/7415)
状況が判断できません たとえば・・・ 今年:1位Aさん、2位Bさん、3位Cさん 去年:1位Cさん、2位Aさん、3位Bさん など順位が違うだけで要素が常に一定なのか 今年:1位Aさん、2位Bさん、3位Cさん 去年:1位Xさん、2位Aさん、3位Bさん など要素が違うのか によって書き方がことなります。 で、出力も結果としてどういう形式のデータを表示したいのかを 補足したほうがよいでしょう
補足
質問があいまいで申し訳ございません。 1万件の要素は一定です。(毎年順位だけが違う。今回の例では現実にはありえませんが) 出力結果は左から順番に列を10列並べる(ハサミで切った10枚の細長い紙を横にきれいにあわせて並べる)感じです。 横方向の和結合?だと思いますが、何卒よろしくお願いします。
- T_kanchan
- ベストアンサー率50% (11/22)
単純なスピードアップの方法は、たった一行入れればいいだけです。 Application.ScreenUpdating = False これを変数などの定義(Dim文)の次あたりに入れてみてください。 これはマクロ実行中はExcelのセルへの変更を一時的にとめるという意味のもので、マクロ実行後に各セルへの変更が行われます。 データ量が多い場合に特に有効です。 特に有効なのは、各セルにデータだけでなく、計算式が入っていたりすると数倍~数十倍近く早くなります。
補足
ありがとうございます。ただ、 今回はExcelマクロではなく、 mysql でお願いいたします。
お礼
解決しました。とても速くなりました。 INNER JOIN の使い方も知らない素人に 本当に丁寧に教えていただき 誠にありがとうございました。