Microsoft Access 掲示板

縦のデータを横に表示したい

2 コメント
views
4 フォロー

下記の件、ご相談させてください。
社員はユニークなレコード数は約30,000件あります。
この社員に紐づく関係者のレコードは数件~10数件あり、
社員を行、関係者を列(最大5列)として、データ成形をしたいと思っています。

Idはオートナンバーで入れていますが、Gidはクエリの演算フィール(Dsount)で設定しています。
ただ、このえん罪んフィールドが重く、クエリを実行すると固まってしまうこともあるくらいパフォーマンスが
最悪です。

ご質問は、まずこのGidを算出するためのパフォーマンスの改善と、
縦のデータを横に展開するためのSQLの書き方につてい教えてください。
Gidは横展開する歳にキーとして使うことを想定したものです。

【クエリ:Gidは演算フィールド】
Id Gid 社員番号 社員名 関係者社員番号 関係者名
1 1 A123 zzz A456 ooo1
2 2 A123 zzz A457 ooo2
3 3 A123 zzz A458 ooo3
4 4 A123 zzz A459 ooo4
5 1 A124 aaa A460 ooo5
6 2 A124 aaa A461 ooo6
7 3 A124 aaa A462 ooo7
8 4 A124 aaa A463 ooo8
9 5 A124 aaa A464 ooo9
10 6 A124 aaa A465 ooo10
11 7 A124 aaa A466 ooo11
12 1 A125 fff A467 ooo12
13 2 A125 fff A468 ooo13
14 3 A125 fff A469 ooo14
15 4 A125 fff A470 ooo15
16 5 A125 fff A471 ooo16
17 6 A125 fff A472 ooo17
18 7 A125 fff A473 ooo18
19 8 A125 fff A474 ooo19
20 9 A125 fff A475 ooo20
21 10 A125 fff A476 ooo21
22 11 A125 fff A477 ooo22
23 12 A125 fff A478 ooo23

【こちらが求める結果】
社員番号 社員名 関係者社員番号1 関係者名1 関係者社員番号2 関係者名2 関係者社員番号3 関係者名3 関係者社員番号4 関係者名4 関係者社員番号5 関係者名5
A123 zzz A456 ooo1 A457 ooo2 A458 ooo3 A459 ooo4
A124 aaa A460 ooo5 A461 ooo6 A462 ooo7 A463 ooo8 A464 ooo9
A125 fff A467 ooo12 A468 ooo13 A469 ooo14 A470 ooo15 A471 ooo16
※最大5列まで表示できればよい

よろしくお願いいたします。

みずき
作成: 2019/06/12 (水) 22:32:53
通報 ...
1
hatena 2019/06/13 (木) 12:32:51 修正

DCountでの連番演算は重い処理になります。
テーブルに、Gid フィールドを追加して、VBAで連番を入力するようにすると高速になります。

下記で、自動で連番を入力する関数を紹介していますので、それを使うといいでしょう。

グループ毎連番を自動入力する関数
クエリで連番を表示する場合、DCount関数やサブクエリを利用する方法はあちこちで紹介されています。 しかし、この方法は自分より前のレコード件数をカウントするというロジックなのでレコード件数が多くなると幾何級数的に重くなります。また、グループ毎に連番を振るという仕様になると、条件式も複雑になってきます。 クエリは使わずにテーブルに連番フィールドを持たせて、そこに VBA で連番を書きこむようにすると高速...
fc2

それができたら、関係者社員番号の横展開は、クロス集計クエリで可能です。

2
みずき 2019/06/13 (木) 22:00:14 a63a9@dbd20

どうもありがとうございます。

キーブレイク処理ですか。
一瞬で採番できてしまったのでビックリしました。

縦を横展開もクロス集計で解決しました。

どうもありがとうございます。、