|
▼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検索をされてみてはいかがでしょうか。
|
|