アクセス2003を使って注文管理のデータベースを作っています。
テーブル「納品データ」のデータを発注番号ごとに納品日と納品数を横に並べたものを作りたいのですが、集計クエリでやってみてもうまくできませんでした。過去の質問の中にも似たようなものがあったのですが、一部理解できない箇所があったりして方法が分からなかったため、質問させていただきます。
■テーブル「納品データ」
|納品番号|発注番号|納品日|納品数|
1 1 04/01 5
2 1 04/02 4
3 1 04/03 3
4 2 04/06 8
5 2 04/08 7
6 3 04/04 6
7 3 04/07 5
8 3 04/09 4
9 4 04/05 7
10 4 04/08 8
■今やろうとしているもの
発注番号|納品日|納品数|納品日|納品数・・・
1 04/01 5 04/02 4 04/03 3
2 04/03 8 04/04 7
3 04/02 6 04/03 5 04/04 4
4 04/02 7 04/03 8
うまく表形式でできなくて、ズレていてすみません。
最終的には、これをサブクエリとしてメイン-サブの親子レポートを作成しようと思っています。
No.3ベストアンサー
- 回答日時:
今回の場合、
クロス集計でなんとかなりそうと思いました。
その為には並べ替えに使用するキーが「一意」である必要があります
それには、発注番号 & 納品番号が使えそう・・・
そこで、発注番号「毎」 かつ 納品番号順での連番を作成することにします
DCount("*","TBL1","TBL1.納品番号<=" & 納品番号 & "and tbl1.発注番号=" & 発注番号)
ここでTBL1の中から、tbl1.発注番号=" & 発注番号であり
かつ
TBL1.納品番号<=" & 納品番号であるものをカウントします。
(このクエリの現レコードの納品番号 以下のものを テーブルTBL1の納品番号から求めます)
なお、今回の場合は、年月日と納品数の二つを表示しなくてはいけませんので
選択クエリを二つ作成してUnion Allし、これをQQ(サブクエリ)としています
Format・・・については
カウントされた数は1,2、・・10,11・・となりますが、並べ替えの際に文字列として判断されると
並び順は1,10,11、・・2,20、となってしまいます。
また
Format(・・) & "1"、Format(・・) & "2" として年月日→数の並び替えを調整して
いますので、この為にも"00"として桁合わせを行っています。
余計に分からなくなったかも?と危惧しています。
説明は苦手なので、後はヘルプや書籍などで勉強してくださいませ。
この回答への補足
ご回答ありがとうございます。いろいろとアドバイスいただいたおかげで、だんだん分かってきました。できましたら、最後の最後にもう1つだけm(_ _)m 解説の解説をお願いできればと・・。
>ここでTBL1の中から、tbl1.発注番号=" & 発注番号であり
かつ
TBL1.納品番号<=" & 納品番号であるものをカウントします。
tbl1.発注番号=" & 発注番号 のところですが、具体的に何と何が同じであればということなのでしょうか・・。
tbl1.発注番号は、架空のもので、" & 発注番号はテーブル「納品データ」の発注番号のことを指しているのでしょうか?
同じように、TBL1.納品番号<=" & 納品番号のところも解説いただけると助かります。
理解力が足りなくて、ほんとうに申し訳ありませんがよろしくお願いします。
No.4
- 回答日時:
DCount("*","TBL1","TBL1.納品番号<=" & 納品番号 & "and tbl1.発注番号=" & 発注番号)
DCount の説明はヘルプでご覧になりましたか?理解されましたか?
今回の場合、
クエリの元となっているフィールド(TBL1.納品番号)、参照先のフィールド(納品番号)とも
同じなので分かりづらいかとは思いますが
DCount("*","TBL1","TBL1.納品番号<=" & 納品番号 & "and tbl1.発注番号=" & 発注番号)
↓
DCount("*","TBL2","TBL1.納品番号<=" & 納品番号 & "and tbl1.発注番号=" & 発注番号)
としたらこの意味は分かりますか?
冒頭の文は、同様にして
DCount("*","TBL1"(検索対象のテーブル名),"TBL1.納品番号(このクエリのフィールド)<=" & 納品番号(検索対象のテーブルのフィールド名) & "and tbl1.発注番号(このクエリのフィールド名)=" & 発注番号(検索対象のテーブルのフィールド名))
という意味です。
DCount("*","TBL1"(検索 ~~号(検索対象のテーブルのフィールド名)) で一行です。
つまり、前回レスの
ここでTBL1の中から、tbl1.発注番号=" & 発注番号であり
かつ
TBL1.納品番号<=" & 納品番号であるものをカウントします。
(このクエリの現レコードの納品番号 以下のものを テーブルTBL1の納品番号から求めます)
となります。
では。
ご回答ありがとうございました。丁寧にアドバイスしていただき、本当に感謝しています。まだまだ勉強不足で理解しきれていない部分もありますが、ヘルプや参考書などももっと活用してしっかりと応用できるようにしていきたいと思います。
No.2
- 回答日時:
それなら始めから・・・ (^_^;)
第二弾です。
(1)と(2)と(3)は消してからお試しください。
また(1)と(2)の間のSQL文だけ、(1)と(3)の間のSQL文だけ、
をそれぞれ貼り付けたらどうなるかも
試してください。
何かが見えてくると思います。
TRANSFORM First(QQ.F1) AS F1の先頭
SELECT QQ.発注番号, Sum(QQ.納品数計) AS 納品数計
FROM [
(1)
SELECT TBL1.納品番号, TBL1.発注番号, TBL1.納品日 as F1 , TBL1.納品数 as 納品数計,
format(DCount("*","TBL1","TBL1.納品番号<=" & 納品番号 & "and tbl1.発注番号=" & 発注番号),"00") & "1" AS cnt
FROM TBL1
(2)
union all
SELECT TBL1.納品番号, TBL1.発注番号, TBL1.納品数 as F1, Null as 納品数計,
format(DCount("*","TBL1","TBL1.納品番号<=" & 納品番号 & "and tbl1.発注番号=" & 発注番号),"00") & "2"AS cnt
FROM TBL1
(3)
]. AS QQ
GROUP BY QQ.発注番号
PIVOT QQ.cnt;
ついでに
納品日と納品数が左寄せになっているのは、異なるデータ型(数値、日付)をUnionした為の型変換で
どうしようもありませんが(あるかも知れないが私は知らない)、
それぞれ、
TBL1.納品日 as F1 → format(TBL1.納品日,"@@@@@@@@@@@") as F1
TBL1.納品数 as F1 → format(TBL1.納品数,"@@@@@@@@@@@") as F1
などと、@ の数を最大桁数+1 位にしておけば、それっぽく見えます。
この回答への補足
ご回答ありがとうございます。最初からやり直しになってしまったようで、お手数かけてすみませんでした。
>また(1)と(2)の間のSQL文だけ、(1)と(3)の間のSQL文だけ、をそれぞれ貼り付けたらどうなるかも試してください。何かが見えてくると思います。
勉強不足ではっきりとは見えませんが(^_^;) (1)のところで納品日、(2)のところで納品数を表示させているというのは分かりました。
もしよかったら、1箇所解説をお願いしたい部分があります。
format(DCount("*","TBL1","TBL1.納品番号<=" & 納品番号 & "and tbl1.発注番号=" & 発注番号),"00") & "1" AS cnt
format関数で00書式にしてそれに1をくっつけて列名にしているのはなんとなく理解できたのですが、Dcount関数の中で何が行われているのかが分からなくて、教えていただけたらと思います。
Dcount関数には引数が3つあってとか書いてあったのですが、よく分からなくて・・。よろしくお願いします。
No.1
- 回答日時:
こんな風でしょうか?
TRANSFORM First(QQ.F1)
SELECT QQ.発注番号
FROM [
SELECT TBL1.納品番号, TBL1.発注番号, TBL1.納品日 as F1 ,
format(DCount("*","TBL1","TBL1.納品番号<=" & 納品番号 & "and tbl1.発注番号=" & 発注番号),"00") & "1" AS cnt
FROM TBL1
union all
SELECT TBL1.納品番号, TBL1.発注番号, TBL1.納品数 as F1,
format(DCount("*","TBL1","TBL1.納品番号<=" & 納品番号 & "and tbl1.発注番号=" & 発注番号),"00") & "2"AS cnt
FROM TBL1
]. AS QQ
GROUP BY QQ.発注番号
PIVOT QQ.cnt;
※クロス集計をレポートにしようとすると、フィールド数の増減があるので
苦労されると思います。
参考URL:http://www.ruriplus.com/msaccess/tch/tch_007.html
この回答への補足
ご回答ありがとうございます。そのままコピペしたらできました。ただ、レポート上で1行ずつの数量合計を出そうと思ったら、12と出したいところが543となってしまいました。合計を出すことはできるのでしょうか?
補足日時:2006/04/26 16:59お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ビジネススキル・経営ノウハウ) 事務してる方教えてください 1 2022/04/14 20:50
- 知人・隣人 個人でデザインやイラストを書いているの友人への依頼 中学生からの友人(親友というほどではありませんが 2 2022/11/03 20:58
- 仕事術・業務効率化 生産管理とは何なのか? 4 2023/07/11 20:02
- Excel(エクセル) 【エクセル関数】複数条件に該当する場合、別の列の数値を合算する。 9 2022/07/09 08:46
- 楽天市場 納品書に記載されていた出荷番号をネットにアップしてしまったのですが、出荷番号から個人が特定されること 2 2022/05/16 20:01
- Excel(エクセル) Excel 関数 vlookupなどの使い方について質問です。 シート1に品番、商品名、単価、発注条 6 2022/06/15 19:16
- その他(ネットショッピング・通販・ECサイト) ネットショッピング(再質問) 1 2022/10/07 11:41
- 財務・会計・経理 取引先の先方から注文した商品に対してこちらが発行する納品書や請求書を業務用・販売用・消耗品などに科目 1 2022/07/18 02:18
- その他(ネットショッピング・通販・ECサイト) ネットショッピング 6 2022/10/07 10:45
- 掃除・片付け 冷蔵庫の寸法 2 2023/01/01 22:12
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
81・・・・・から始まる電話...
-
電話番号 +817673467911という...
-
固定電話着信履歴 181 ・・・・...
-
体育の時の4列横隊ってどーやっ...
-
不気味な番号
-
携帯番号変える時は、それなり...
-
if関数を使って割引率をだす
-
至急お願いいたします! ゆう...
-
すべて「ひとつ・・・」ではじ...
-
0120613184は、どこの番号です...
-
MS Wordで図表番号を1から振り...
-
同じ商品なのに、JANコード...
-
電話をかけるのに、違う番号を...
-
県境をまたぐ県道の番号について
-
iPhoneSE2にIMEIとIMEI2という...
-
フリーダイヤルのけた数
-
1から5までの番号が1つずつ書か...
-
090から始まる電話番号がほしい...
-
FeliCaカードの”IDm”って何です...
-
メルカリやラクマができず 体調...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
固定電話着信履歴 181 ・・・・...
-
81・・・・・から始まる電話...
-
電話番号 +817673467911という...
-
電話をかけるのに、違う番号を...
-
フリーダイヤルのけた数
-
体育の時の4列横隊ってどーやっ...
-
国際電話番号の前の+(プラス...
-
メルカリやラクマができず 体調...
-
携帯番号変える時は、それなり...
-
66から始まる番号
-
至急お願いいたします! ゆう...
-
P/Nとは?
-
不気味な番号
-
同じ商品なのに、JANコード...
-
すべて「ひとつ・・・」ではじ...
-
迷惑電話
-
FAX番号の英語表記とは?
-
メルカリをやるために番号変え...
-
内線番号一覧が分かりづらい
-
パワーポイントは、ページ番号...
おすすめ情報