• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アクセスでデータを横に並べる方法)

アクセスデータを横に並べる方法

このQ&Aのポイント
  • アクセス2003を使用して注文管理のデータベース作成中。テーブル「納品データ」のデータを発注番号ごとに納品日と納品数を横に並べたい。集計クエリではうまくできないため、質問する。
  • 発注番号ごとに納品日と納品数を横に並べたいが、表形式でうまく表示できない。サブクエリとして親子レポートを作成する予定。
  • アクセス2003での注文管理データベース作成中。納品データテーブルの情報を発注番号ごとに納品日と納品数を並べる方法が分からず、質問しました。

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答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"として桁合わせを行っています。 余計に分からなくなったかも?と危惧しています。 説明は苦手なので、後はヘルプや書籍などで勉強してくださいませ。

melon100
質問者

補足

ご回答ありがとうございます。いろいろとアドバイスいただいたおかげで、だんだん分かってきました。できましたら、最後の最後にもう1つだけm(_ _)m 解説の解説をお願いできればと・・。 >ここでTBL1の中から、tbl1.発注番号=" & 発注番号であり かつ TBL1.納品番号<=" & 納品番号であるものをカウントします。 tbl1.発注番号=" & 発注番号 のところですが、具体的に何と何が同じであればということなのでしょうか・・。 tbl1.発注番号は、架空のもので、" & 発注番号はテーブル「納品データ」の発注番号のことを指しているのでしょうか? 同じように、TBL1.納品番号<=" & 納品番号のところも解説いただけると助かります。 理解力が足りなくて、ほんとうに申し訳ありませんがよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答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の納品番号から求めます) となります。 では。

melon100
質問者

お礼

ご回答ありがとうございました。丁寧にアドバイスしていただき、本当に感謝しています。まだまだ勉強不足で理解しきれていない部分もありますが、ヘルプや参考書などももっと活用してしっかりと応用できるようにしていきたいと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答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 位にしておけば、それっぽく見えます。

melon100
質問者

補足

ご回答ありがとうございます。最初からやり直しになってしまったようで、お手数かけてすみませんでした。 >また(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つあってとか書いてあったのですが、よく分からなくて・・。よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答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
melon100
質問者

補足

ご回答ありがとうございます。そのままコピペしたらできました。ただ、レポート上で1行ずつの数量合計を出そうと思ったら、12と出したいところが543となってしまいました。合計を出すことはできるのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Accessのクエリによる集計が出来ない

    Accessのクエリによる集計が出来ない kamuycikapです。 OKWaveで様々な方のアドバイスを頂きながら、慣れないAccessと悪戦苦闘しております。 一昨日、計算したい表を作成する為にOKWaveに質問を載せました。 http://okwave.jp/qa/q5549286.html 無事に上記のアドバイスでリレーションのオプション設定を行い、集計計算したいクエリの結果を表示することが出来ました。 その表を元にして 下記の質問でアドバイス頂いた方法による集計を行おうとしたのですが、集計出来なくて困っています。 http://okwave.jp/qa/q5544785.html データベースの構成とキーは以下のとおりです。 --ここから <データベース構造:リレーションシップ> リレーションシップとテーブルの構成は下記の通りです。 -->がリレーションシップです。 Kがキーになります。 ■テーブルA      ■テーブルB    ■テーブルC    ■テーブルD K納品書コード --> K納品書コード --> K納品書コード  --> K納品書コード 仕入数          K商品コード  --> K商品コード   --> K商品コード                             K商品連番    --> K商品連番                             出品数量        K出品連番                             商品名           発送個数                             色             発送日付                             サイズ                             売値 ※テーブルCからテーブルDへのリレーションオプションを「’テーブルC’の全レコードと’テーブルD’の同じ 結合フィールドのレコードだけを含める。」としています。 <作りたいデータ> 納品書コード、商品コード、商品連番、商品名、色、サイズ、売値、仕入数、出品数量、発送個数、出品在庫数、倉庫在庫 <クエリ> ○グループ  納品書コード、商品コード、商品連番、商品名、色、サイズ、売値、仕入数、出品数量 ○合計(集計)  発送個数 ○出品在庫数(演算)  [出品数量]-[発送個数] ○倉庫在庫(演算)  [仕入数]-[発送個数] <データ状況> テーブルCのデータは約300レコードありますが、そのうち20件ほどしか商品が発送されていない為、テーブルDのデータは20件しかありません。 <望む結果> テーブルCのデータが全て表示され、紐つけられたテーブルDのデータがが存在する場合は、発送個数を表示し出品在個数を演算する。 演算した出品在個数を利用して、倉庫在庫も演算する。 <クエリの実行結果> テーブルCのデータが全て表示され、テーブルDに紐つけられたレコードも表示されるが、テーブルDに入力されている20件のデータが商品連番(テーブルCのフィールド)ごとに集計されない。 --ここまで <目的> お店に出品された商品は、日を分けて少しずつ売れていきます。(一日で全部売れることもありますが....) 従って、出品された商品(テーブルCのデータ)に対して売れていく数(テーブルDの複数のレコード)のデータがぶら下がっている形になります。 このようなデータベースですので、出品した商品が何個売れたかを計算する為には、商品に対する売れた個数を集計(合計)しなければなりません。 <結果> テーブルCの商品連番ごとの発送個数を集計したいのですが、テーブルDの出品連番ごとの集計になっている様子です。 <頂きたいアドバイス> 上記のデータベースとクエリで、テーブルCの商品連番に紐ついたテーブルDに格納されている発送個数の合計値を集計するための方法 以上、識者の方のアドバイスをお願い致します。

  • 重くなってしまったアクセスを軽くする方法

    アクセス2000で社内のデータ-ベースを作っています。 ようやくデータ-ベースが完成したので、データーベース分割ツールを使ってデーターベースをテーブルデータと、フォーム等に分割し、テーブルデータを社内のランのサーバーに置き、クエリ、フォーム及びレポートを各パソコンにコピーして皆で使えるようにしました。 とりあえず、動くのですが、動きが非常に重いんです。これは、どうすれば軽くなるのでしょうか?

  • Access2002で任意のレコードのみをレポートで印刷したい

    http://oshiete1.goo.ne.jp/qa5272888.html の続きです。 テーブルは下記のとおりです。(計4つ) 1.顧客テーブル(データ投入済み) ・顧客ID(テキスト) ・顧客名(テキスト) ・フリガナ(テキスト) 2.納品書テーブル(データはフォームから自動生成) ・納品書ID(オートナンバー) ・納品日付(日付) ・顧客ID(テキスト) 3.注文テーブル(データ投入済み) ・注文ID(テキスト) ・顧客ID(テキスト) ・納品書ID(テキスト) ・数量(数値) ・摘要(テキスト) ・選択(Yes/No) 4.商品マスター(データ投入済み) ・商品ID(テキスト) ・商品名(テキスト) ・単価(数値) 以上の4つのテーブルでテストDBを作っています。 上述したとおり、フォームで、 1.新規レコードの作製 2.納品日付入力 3.コンボボックス(従業員名、カナ)をコンボボックスで選択 という手順を踏み、納品書番号が自動的に振られるフォームまで作成できました。 これを元に、レポートとして、 ・顧客を選択 ・納品書番号を選択 して、選択したレコードをレポートに表示したい、という質問です。 前の質問で、下記ご回答を得ております。 --------------------------------------------------------------- 1.納品書の一覧 以前作成した「納品書番号」のレコードソースを SELECT 納品書テーブル.納品書ID, 納品書テーブル.納品日付, 納品書テーブル.顧客ID FROM 納品書テーブル ORDER BY 納品書テーブル.納品書ID DESC; に変更して、新しいものが先に見えるようにします 2.フォームのプロパティで「データ」の「追加の許可」を「いいえ」にします。 3.ウィザードが起動したら「フォームの操作」「フォームを開く」と進み、「納品書番号(選択)」を開くようにします。これでいつでも新規納品書を作成できます 4.「納品書番号」フォームのイベントで「アクティブ時」を「[イベント プロシージャ]」にし編集ボタン(…)を押して、以下のようにします Private Sub Form_Activate() Me.Requery End Sub これで新規納品書作成後に「納品書番号(選択)」を閉じると、最新の納品書が表示されます 5.レポート「納品書」の作成 レコードソースは SELECT 納品書テーブル.納品書ID, 納品書テーブル.納品日付, 従業員マスタ.従業員名 FROM 従業員マスタ INNER JOIN 納品書テーブル ON 従業員マスタ.従業員ID = 納品書テーブル.顧客ID WHERE (((納品書テーブル.納品書ID)=[Forms]![納品書番号]![納品書ID])); 6.レポートにフィールドリストから「納品書ID」「従業員名」などを貼り付けます 7.「納品書番号」をデザインモードで開き、ボタンを追加し「納品書」レポートをプレビューで開くようにします。これで任意の納品書が印刷できるようになります 8.実際のレポートは納品書番号に対応するアイテムが並ぶ必要がありますが、これはレコードソース(クエリ)を拡張することでもできるし、親子レポートにすることでも可能です。色々試してください --------------------------------------------------------------- fuuten_no_nekoさん、ありがとうございました。 これまでは「フォーム」に関する質問で、今回は「レポート」に関するものに進んできましたので、新規の質問にしたほうがよいとのアドバイスを受け、この質問を立ち上げます。 なお、「今ここまでできている」という部分は、補足に記述します。 どうぞよろしくお願いします。

  • ACCESSのデータ印刷方法

    アクセス初心者です。今回初めてデータ,クエリ,レポートと一通りどうにか作成しました(フォームは使っていません)。しかし,日々データを入力するにあたって,その日入力した伝票分のデータだけを印刷したいと思っても印刷のたびに全部のレポートが印刷されてしまいます。 こちらでどなたかが以前に質問されていないかと思い探したところ 質問No.981237:ACCESS最終データだけ印刷できるレポート という私が求めているのと同じような質問をされていらっしゃる方がありました。 しかし,その回答を読んでも初心者の私にはどのようにすればよいのか分かりません。 この質問者の方はチェックボックスが解決策になったようですが,チェックボックスの設定方(作成法)が分かりませんでした。 フィールド名「発注日」に入力してある発注日の日付を選択してその日のデータだけを印刷できるのが希望です。 どうぞよろしくご指導ください。

  • エクセルのデータ集計

    エクセルでデータの集計についての質問です。 商品のデータベースで「商品名」「注文日」「納品日」が入っています。 「注文日」から「納品日」までが入荷を待ち状態ということになります。 ここで、日ごとの納品待ち商品合計数の年平均を取るにはどうすれば良いでしょうか。 エクセルorアクセスで集計する方法を教えてください!! よろしくお願いいたします。

  • access レポートで表示されないデータ

    2つのクエリの情報をメインとサブでレポート作っています。 2つのクエリは名前テーブルでそれぞれのテーブルとリレーションしています。 ただ、2つのクエリに情報が入っているものは表示されるのですが、 サブレポートに設定しているクエリの情報しかないものはレポート出力されません。 なにが問題なのでしょうか?よろしくお願いします。

  • アクセスでデータ抽出

    アクセス2003を使って受講者のデータベースを作っています。 あるテーブルに受講者の開講日・講座名・氏名・点数・レポート提出・提出期限等を入力しています。 それをクエリで未提出・期限間近の抽出条件を入れて、レポート未提出かつ期限間近の受講生を抽出しています。 このデータをレポートにするのですが、レポート上で「講座名」フィールドをグループ化にし、その講座ごとの未提出かつ期限間近の受講生の人数を出しています。 ここまでは自力できたのですが、先程のクエリで抽出した際に開講日もでます。この開講日で各科目、何人受講したかをレポート上で抽出をしたいのです。 要は、その開講日の数学を何人受講したかです。 まとめますと、「各科目ごと」で「期限間近」で「未提出」の者の数はだせましたが、「各科目ごと」の総数(期限内に提出した者と期限内に提出していない者)を「レポート上」で出したいのです。 ややこしいですが、教えて頂けないでしょうか? 質問がわかりにくいかと思いますので、随時補足させて頂きます。 よろしくお願いします。

  • Accessのクエリ集計について

    Accessのクエリ集計について kamuycikapです。 テーブルを集計するクエリについて悩んでいます。 以下がテーブルの状況と試行錯誤しているクエリ。 そして実行結果の箇条書きです。 非常に長文ですが、識者の方のアドバイスをお願い致します。 --ここから <データベース構造:リレーションシップ> リレーションシップとテーブルの構成は下記の通りです。 -->がリレーションシップです。 ■テーブルA      ■テーブルB    ■テーブルC    ■テーブルD 納品書コード ーー> 納品書コード ーー> 納品書コード  ーー> 納品書コード 仕入数          商品コード  ーー> 商品コード   ーー> 商品コード                               商品連番    ーー> 商品連番                               出品数量        出品連番                               商品名           発送個数                               色             発送日付                               サイズ                               売値 <作りたいデータ> 納品書コード、商品コード、商品連番、商品名、色、サイズ、売値、仕入数、出品数量、発送個数、出品在庫数、倉庫在庫 <クエリ> ○グループ  納品書コード、商品コード、商品連番、商品名、色、サイズ、売値、仕入数、出品数量 ○合計(集計)  発送個数 ○出品在庫数(演算)  [出品数量]-[発送個数] ○倉庫在庫(演算)  [仕入数]-[発送個数] <データ状況> テーブルCのデータは約300レコードありますが、そのうち20件ほどしか商品が発送されていない為、テーブルDのデータは20件しかありません。 <望む結果> テーブルCのデータが全て表示され、紐つけられたテーブルDのデータがが存在する場合は、発送個数を表示し出品在個数を演算する。 演算した出品在個数を利用して、倉庫在庫も演算する。 <クエリの実行結果> テーブルCのデータが全て表示されず、テーブルDに紐つけられたレコードのみが表示されるため、約300件のデータではなく、テーブルDに入力されている20件しか表示されない。 --ここまで 目的は、テーブルCのデータを全て表示し、発送情報がテーブルDに入力されているデータについては演算結果を表示する事です。 現状では、テーブルDのデータしかテーブルCのレコードが表示されません。。。。 どうすれば目的のデータを収集できるクエリが作成で切るのか、識者の方のアドバイスをお願いします。

  • ACCESS レポートで常に1から番号を振る方法

    もしかしたら簡単なことなのかもしれませんが、まったく見当すらつかないので教えてください。 レポートで1行目から番号をふりたいのですがどうすればいいのでしょうか? ACCESS2000で、あるデータを読み込んでそれをレポートで表示させるDBを作っています。 表示・印刷するためだけのDBなので、別のデータを表示・印刷する場合は削除クエリを使っていったんテーブルを削除して、表示させたいデータをインポートさせています。 オートナンバーで番号を振ると、削除クエリを実行させると削除する前のデータの続きの連番をふってしまいますよね?そうではなくて、常に1行目に1、2行目に2を振りたいのです。 テーブルかクエリに振るのかな?と思ったのですが、レポートに直接番号を振る方法もあるのでしょうか? どちらに番号を振ってもいいのですが、レポートに番号を表示するよい方法がありましたらお教えください。

  • Accessの抽出

    今、何処へいくつ荷物を送るかのリストを 作成しています まず、テーブルAにデータが入っています クエリーBで日付にてデータ抽出させています クエリーCでクエリーBで抽出したデータの クロス集計をしています。 そして、その結果をレポートで印刷します。 ここまではいいんですが、 レポートで出したデータの中に レポートに出さなくてもよい荷物が数個あるんです その荷物がレポートに出ないようにする為には どうしたらいいのかわかりません。 ちなみにテーブルAは基本データなので いじりたくはありません。 このような条件で数個の印字しなくてよいデータを 出さずにどこへ荷物がいくついくのかがわかる リストを作成するにはどうしたらよいでしょうか? 説明がわかりずらいとは思いますが 宜しくお願い致します。

プリンターに接続できない
このQ&Aのポイント
  • プリンターに接続できないトラブルの対処方法をご紹介します。
  • ブラザー製品のmfcプリンタ5490cnに接続できない場合のトラブルシューティングを解説します。
  • PCから直接接続しているにも関わらず、プリンターに接続できない場合の対処法についてご質問いただきました。
回答を見る

専門家に質問してみよう