|
▼miyakeさん、クロ さん:
おはようございます。
今回の件とは直接関係はないのですが2,3点気づいた事を…。
> 日付 時刻 担当 商品
> 2006/09/15 2:00:00 山田 テレビ
主キーは設定していますか?
ご提示の様なテーブル構成ですと、
同日、同時刻、同担当という条件でテレビが2台、という事はありえませんか?
もし有り得た場合、「そのうち一つを取り消し処理する」などという場合
目安となるフィールドが無いので、処理が複雑になります。
Uniqueな(絶対に重複しない)フィールドを一つ追加した方が良いと思われます。
> 日付 時刻
> 2006/09/15 2:00:00
Format関数などで確認すると
2006/09/15 という日付型の値は 2006/09/15 00:00:00
2:00:00 という日付型の値は 1899/12/30 02:00:00
という事になります。
わざわざフィールドを分けずに
日時
2006/09/15 2:00:00
という管理をし
必要に応じて日付部分、時刻部分を取り出す事も可能です。
> 商品
> テレビ
> ラジオ
マスタを作って正規化すると
データベースとしてより使いやすいものになるかと思われます。
T_商品マスタ
商品ID 商品名
1 テレビ
2 ラジオ
3 カメラ
4 ビデオ
5 CD
6 DVD
T_担当者マスタ
担当者ID 担当者名
1 山田
2 佐藤
3 佐々木
4 鈴木
T_売上履歴
売上ID 日時 担当者ID 商品ID
1 2006/09/15 2:00:00 1 1
2 2006/09/15 3:00:00 1 2
3 2006/09/15 19:00:00 1 3
4 2006/09/20 8:00:00 2 4
5 2006/09/20 20:00:00 2 5
6 2006/10/04 9:00:00 3 1
7 2006/10/04 11:00:00 3 1
8 2006/10/04 22:00:00 3 6
9 2006/10/05 16:00:00 4 2
10 2006/09/15 17:00:00 1 6
を用意します。
Q_売上情報:
SELECT T_売上履歴.売上ID,
Format([日時],"yyyy/mm/dd") AS 日付,
Format([日時],"hh:nn:ss") AS 時刻,
T_担当者マスタ.担当者名,
T_商品マスタ.商品名
FROM (T_売上履歴
INNER JOIN T_商品マスタ
ON T_売上履歴.商品ID = T_商品マスタ.商品ID)
INNER JOIN T_担当者マスタ
ON T_売上履歴.担当者ID = T_担当者マスタ.担当者ID;
Q_売上情報クロス:
TRANSFORM First(T_商品マスタ.商品名) AS 商品名の先頭
SELECT Format([日時],"yyyy/mm/dd") AS 日付,
T_担当者マスタ.担当者名
FROM (T_売上履歴
INNER JOIN T_商品マスタ
ON T_売上履歴.商品ID = T_商品マスタ.商品ID)
INNER JOIN T_担当者マスタ
ON T_売上履歴.担当者ID = T_担当者マスタ.担当者ID
GROUP BY Format([日時],"yyyy/mm/dd"),
T_担当者マスタ.担当者名
PIVOT "商品_" & DCount("*","T_売上履歴",
"担当者ID=" & T_売上履歴!担当者ID & " AND 売上ID <= " & [売上ID]);
クエリの SQLビューに上記を記述し、結果を確認されてみて下さい。
|
|