Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3776 / 9994 ←次へ | 前へ→

【9475】Re:SQLの記述
回答  小僧  - 07/5/30(水) 8:12 -

引用なし
パスワード
   ▼hiro さん、たんさん:
こんにちは。

> 番号  商品名  在庫数 工程1 工程2
> 01  A完成品  50  5   25
> 02  B完成品  10       5


この形をクロス集計クエリを最終形にされたいのであれば、
その基になるクエリはどの様なものが必要かを考えてみましょう。


番号 商品名  xxx   数量
01 A完成品 在庫数  50
01 A完成品 工程1  5
01 A完成品 工程2  25
02 B完成品 在庫数  10
02 B完成品 工程2  5

こんなデータが必要になってくるはずです。

SELECT Left([番号],2) AS 種別,
    テーブル1.商品名,
    IIf(Len([番号])=2,"在庫数","工程" & Right([番号],1)) AS xxx, テーブル1.在庫数 AS 数量
FROM テーブル1;


このクエリをクロス集計し、Q_Temp という名前で保存します。

TRANSFORM Sum(テーブル1.在庫数) AS 数量
SELECT Left([番号],2) AS 種別
FROM テーブル1
GROUP BY Left([番号],2)
PIVOT IIf(Len([番号])=2,"在庫数","工程" & Right([番号],1));


このクエリと基のテーブルを結合します。
SELECT Q_Temp.種別,
    テーブル1.商品名,
    Q_Temp.工程1,
    Q_Temp.工程2,
    Q_Temp.在庫数
FROM Q_Temp
INNER JOIN テーブル1 ON Q_Temp.種別 = テーブル1.番号;


こんな感じで結果を出せますが、あくまでも結果が返るというだけであり
できる事でしたら基のテーブル構造を見直されたほうが良い気がします。


T_商品マスタ
商品コード 商品名
01     A
02     B


T_状態マスタ
状態コード  状態名
00      完成品
01      工程1
02      工程2


T_商品テーブル
ID 商品コード 状態コード 数量
1  01     00      50
2  01     01      10
3  01     02       5
4  02     00      25
5  02     02       5


上記は1例ですが、今までのテーブル構成よりはSQLでの算出をやりやすくなるかと思われます。
興味を持たれましたら「テーブルの正規化」というキーワードを基に
色々Web検索をされてみてはいかがでしょうか。

375 hits

【9469】SQLの記述 hiro 07/5/29(火) 15:58 質問
【9470】Re:SQLの記述 たん 07/5/29(火) 16:48 回答
【9472】Re:SQLの記述 hiro 07/5/29(火) 17:29 質問
【9475】Re:SQLの記述 小僧 07/5/30(水) 8:12 回答
【9477】Re:SQLの記述 hiro 07/5/30(水) 9:07 お礼

3776 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078201
(SS)C-BOARD v3.8 is Free