お世話になります。
現在EXCEL VBAとACCESSでデータを表示する調査をしております。
以下のように、複数行を一列に表示する場合の実現方法が分からず悩んでおります。(SQLはあまり詳しくありません。)
悩みどころは2点あります。
(1)SQLでどのようにデータを取得すればよいか?
(複数回SQLを発行しなければいけないのか?など)
(2)取得したデータの表示方法
(2次元配列で持たせるのが良いのか?など)
どなたかご教示いただけませんでしょうか?
よろしくお願い致します。
--------------------------------------
【環境】
Windows XP
EXCEL2003
Access2000
社員テーブル構成
1.id(key1) :社員コード
2.code(key2) :言語
3.stutus :状態(1:習得,2:未修得)
EXCELで以下の表示を実現したいと考えてます。
(1)社員テーブルを読み込み、セルにヘッダー行と明細行を出力する。
(2)ヘッダー行には[code]を重複排除して横一列に表示する。
(3)明細行には[id]毎に出力する。
(4)[status]が"1"なら"○"に"2"なら"×"、それ以外は"-"にする。
([code]は各idに必ずしも存在しない)
■テーブルイメージ
id code status
00001 VBA 1
00001 CBL 1
00002 VBA 2
00002 JAV 2
00002 RPG 1
00003 PHP 1
00003 CBL 2
■出力イメージ
VBA CBL JAV RPG PHP
00001 ○ ○ - - -
00002 × - × ○ -
00003 - × - - ○
--------------------------------------
No.2ベストアンサー
- 回答日時:
[code]は各idに必ず存在するように加工してから、クロス集計クエリを使用すればいかがでしょうか?かなり回りくどいやり方になりますけれども。
表示するマークを保存したtbl2を作ります。
クエリ: queIDとクエリ: queCDで、IDとcodeを抽出します。
クエリ: queIDCDで、IDとcodeの組み合わせを作成します。
クエリ: queTbl1で、IDとcodeの組み合わせに対するstatusを取得します。
クエリ: queDispで、おまじないをしておきます(汗)
(NZ関数を通すと必ず文字になるのかな?これがないとqueALLで「型が一致しません」というエラーになる・・・。)
クエリ: queALLで、[status]をエンコードします。
クエリ: queAllのクロス集計で、クロス集計を行ないます。
tbl2
-----------
statusdisp
0-
1○
2X
------------
クエリ: queID
------------
SELECT DISTINCT [tbl].[id]
FROM tbl;
------------
クエリ: queCD
------------
SELECT DISTINCT [tbl].[code]
FROM tbl;
------------
クエリ: queIDCD
------------
SELECT [queID].[id], [queCD].[code]
FROM queCD, queID;
------------
クエリ: queTbl1
------------
SELECT [queIDCD].[id], [queIDCD].[code], nz([status],0) AS sts
FROM queIDCD LEFT JOIN tbl ON ([queIDCD].[code]=[tbl].[code]) AND ([queIDCD].[id]=[tbl].[id]);
------------
クエリ: queDisp
------------
SELECT nz([status],0) AS sts, tbl2.disp
FROM tbl2;
------------
クエリ: queAll
------------
SELECT queTbl1.*, queDisp.disp
FROM queDisp INNER JOIN queTbl1 ON queDisp.sts = queTbl1.sts;
------------
クエリ: queAllのクロス集計
------------
TRANSFORM First([disp])
SELECT [id]
FROM queAll
GROUP BY [id]
PIVOT [code];
お返事遅くなりましてすみませんでした。
想定していた表を作ることができました。
ありがとうございます。
ご教示いただいた各クエリを理解してから
応用させていただきます。
...SQL文をガリガリ書こうとすると
大変なことになりそうですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Access2016でフォーム内にExcelの複数シートを 表示させるイメージで複数テーブルの デー 1 2022/11/25 15:30
- その他(Microsoft Office) excel テーブル 4 2023/03/18 16:11
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Excel(エクセル) 重複したデータ(空白は除く)のVBA表記について 4 2022/08/15 07:28
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) 「Excelのオプション」の「ユーザーインターフェイスのオプション」の設定値をVBAで取得したい 1 2022/07/31 23:49
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。 2 2023/07/14 14:06
- その他(プログラミング・Web制作) プログラミング Python 1 2022/09/28 05:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
副問合せの書き方について
-
エクセルの関数について教えて...
-
Access パラメータクエリをcsv...
-
SQLite3でこんな便利なSQLはで...
-
MYSQLでSQLSERVERのリンクサー...
-
1テーブル&複数レコードの更新...
-
ある条件の最大値+1を初番する...
-
group byのSQLでインデックスを...
-
verilogに適したvimの設定を探...
-
mysqlのdeleteのサブクエリーで...
-
MySQLのIF文
-
クエリ表示と、ADOで抽出したレ...
-
複数テーブルのGROUP BY の使い...
-
カテゴリのDB設計について
-
テーブル作成です。どこかのス...
-
SELECT出来るのにDELETE出来な...
-
URL と行番号の指定
-
親と子供が複数のSQL取得方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
VIEWの元のテーブルのindexって...
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
副問合せの書き方について
-
マイクラPC版のコマンドで効率...
-
Unionした最後にGROUP BYを追加...
-
selectした大量データをinsert...
-
SQLにて特定の文字を除いた検索...
-
[SQLServer] テーブル名からカ...
-
1テーブル&複数レコードの更新...
-
inner joinをすると数がおかし...
-
クエリ表示と、ADOで抽出したレ...
-
ある条件の最大値+1を初番する...
-
sqlで、600行あるテーブルを100...
-
複数テーブルのGROUP BY の使い...
-
insertを高速化させたい
-
PL/SQLの変数について
-
キー毎の、ある列のmaxのレコー...
おすすめ情報