ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者: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 でお願いいたします。
この回答へのお礼この回答にお礼をつける(質問者のみ)
最新から表示回答順に表示良回答のみ表示