質問 |
||
| 質問者:Scipio93 | 結合? コピー? 初歩的な質問ですが | |
|---|---|---|
困り度:
|
プログラミングを始めたばかりの初心者ですが、教えてください。 1から1万までのデータ、たとえばその年の納税額ランキングの1位から1万位の氏名だけのデータがあるとします。それを単純に10年分並べたカラムが10の表をつくりたいのですが、どのようにしたら一番速くなるのでしょうか。 エクセルなら単純にコピーしたらよいのですが、各年の1位から1万位を結合したら(私のやり方が間違っているのかもしれませんが)とても時間がかかります。何卒お願いいたします。 |
|
質問投稿日時:08/03/11 08:38 質問番号:3852231 |
||
回答良回答20pt |
|
| 回答者:yambejp | ってことは総じてこんな感じでしょうか? 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 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/11 13:59 回答番号:No.5 |
|
| この回答へのお礼 | 解決しました。とても速くなりました。 INNER JOIN の使い方も知らない素人に 本当に丁寧に教えていただき 誠にありがとうございました。 |
回答 |
|
| 回答者:yambejp | たびたび申し訳ないです 通常このようなやり方をする場合ランキング用のフィールド(1〜1万までの連番)が あるとおもいますが本当に名前だけなのですか? SQLではデータの格納順に表示されることは保証されていません。 なので名前だけが羅列されているだけではランクを表すことに使えません。 (仮に順番がかわらないように見えてもそういうものではないのです) なので、今のままの命題では10年分のランキングを横方向に羅列することは 困難です。 ランク用のフィールドもしくは序列をつけるようなデータがあるのであれば その辺の構造がわかるような補足が必要になります |
|---|---|
| 種類:補足要求 どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/11 12:47 回答番号:No.4 |
|
| この回答への補足 | すみません。ランキング用のフィールドはあります。 よろしくお願いします。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| 回答者:yambejp | もう一個、 10年分のデータはテーブルが分かれているのでしょうか? それとも一つのテーブルに年を明示するフィールドが存在するのでしょうか? |
|---|---|
| 種類:補足要求 どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/11 12:43 回答番号:No.3 |
|
| この回答への補足 | 早速ありがとうございます。 10年分のデータはテーブルが分かれています。 10のテーブルで、各テーブルのカラムは1です。 よろしくおねがいします。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| 回答者:yambejp | 状況が判断できません たとえば・・・ 今年:1位Aさん、2位Bさん、3位Cさん 去年:1位Cさん、2位Aさん、3位Bさん など順位が違うだけで要素が常に一定なのか 今年:1位Aさん、2位Bさん、3位Cさん 去年:1位Xさん、2位Aさん、3位Bさん など要素が違うのか によって書き方がことなります。 で、出力も結果としてどういう形式のデータを表示したいのかを 補足したほうがよいでしょう |
|---|---|
| 種類:補足要求 どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/11 11:23 回答番号:No.2 |
|
| この回答への補足 | 質問があいまいで申し訳ございません。 1万件の要素は一定です。(毎年順位だけが違う。今回の例では現実にはありえませんが) 出力結果は左から順番に列を10列並べる(ハサミで切った10枚の細長い紙を横にきれいにあわせて並べる)感じです。 横方向の和結合?だと思いますが、何卒よろしくお願いします。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答良回答10pt |
|
| 回答者:T_kanchan | 単純なスピードアップの方法は、たった一行入れればいいだけです。 Application.ScreenUpdating = False これを変数などの定義(Dim文)の次あたりに入れてみてください。 これはマクロ実行中はExcelのセルへの変更を一時的にとめるという意味のもので、マクロ実行後に各セルへの変更が行われます。 データ量が多い場合に特に有効です。 特に有効なのは、各セルにデータだけでなく、計算式が入っていたりすると数倍〜数十倍近く早くなります。 |
|---|---|
| 種類:アドバイス どんな人:経験者 自信:参考意見 |
|
| |
回答日時:08/03/11 09:09 回答番号:No.1 |
|
| この回答への補足 | ありがとうございます。ただ、 今回はExcelマクロではなく、 mysql でお願いいたします。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |