Microsoft Access Club Access超初心者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルレポートでの並び替えについて
記事No83198
投稿日: 2017/11/30(Thu) 16:56
投稿者
解決済: ON
OS:win10
Access Version:2017

レポート出力で下記のように縦に表示されるのを横に並び替えたいです。

店名 品名  日付    曜日  区分1  区分2 区分3
A店  A001 2017/11/01 月曜日  1    0   2
A店  A001 2017/11/02 火曜日  4    0   4 
A店  A001 2017/11/03 水曜日  6    0   1 
A店  A001 2017/11/04 木曜日  2    0   2  

  下に各店舗ごとに 1週分が表示されます

これを

店名 品名  区分   日付    月曜日 火曜日 水曜日 木曜日 金曜日 土曜日 日曜日
A店  A001  1 2017/11/01 1 4 6 2
2 0 0 0 0
3 2 4 1 2
B店  A001


クエリで抽出したものが縦並びになっているので上のやり方しかできませんでした。
どうしても横並びに変更したいのですが、行き詰っています。

どうか教えてください。     

タイトルRe: レポートでの並び替えについて
記事No83199
投稿日: 2017/11/30(Thu) 21:51
投稿者hatena
解決済: ON
> レポート出力で下記のように縦に表示されるのを横に並び替えたいです。
> 
> 店名 品名  日付    曜日  区分1  区分2 区分3
> A店  A001 2017/11/01 月曜日  1    0   2
> A店  A001 2017/11/02 火曜日  4    0   4 
> A店  A001 2017/11/03 水曜日  6    0   1 
> A店  A001 2017/11/04 木曜日  2    0   2  

レコードソースのテーブルがこのようなフォーマットになっているのでしょうか。
だとしたら、

>   下に各店舗ごとに 1週分が表示されます
>      
> これを
> 
> 店名 品名  区分   日付    月曜日 火曜日 水曜日 木曜日 金曜日 土曜日 日曜日
> A店  A001  1       2017/11/01      1     4     6      2
>                2                       0     0     0      0           
>                3                       2     4     1      2
> B店  A001

テーブルからクロス集計クエリを作成して、それをレコードソースにすればいいでしょう。


店名、品名、区分、日付 は行見出しに、
曜日 は列見出しに、
[区分1] & Chr(13) & Chr(10) & [区分2] & Chr(13) & Chr(10) & [区分3] を値にして、集計は「先頭」に
設定します。

タイトルRe^2: レポートでの並び替えについて
記事No83201
投稿日: 2017/12/01(Fri) 08:11
投稿者
解決済: ON
hatenaさん、ありがとうございます。
これも試行錯誤しながらやってはみたのですが、行見出しは3つしか選べないのですが4つ並べることはできるのでしょうか?

また、下記の意味が分かりません。
すみません、初心者ですので詳しくお願いしてもいいでしょうか?

> [区分1] & Chr(13) & Chr(10) & [区分2] & Chr(13) & Chr(10) & [区分3] を値にして、集計は「先頭」に
> 設定します。

タイトルRe^3: レポートでの並び替えについて
記事No83203
投稿日: 2017/12/01(Fri) 22:02
投稿者hatena
解決済: ON
> これも試行錯誤しながらやってはみたのですが、行見出しは3つしか選べないのですが4つ並べることはできるのでしょうか?

ウィザードで作成しているのでしょうか。
デザインビューで設定すれば行見出しは4つでも可能です。

> また、下記の意味が分かりません。
> すみません、初心者ですので詳しくお願いしてもいいでしょうか?
>
> > [区分1] & Chr(13) & Chr(10) & [区分2] & Chr(13) & Chr(10) & [区分3] を値にして、集計は「先頭」に
> > 設定します。

デザインビューで、フィールド欄に、
[区分1] & Chr(13) & Chr(10) & [区分2] & Chr(13) & Chr(10) & [区分3]
と入力して、
行列の入れ替えは「値」
集計は「先頭」に設定してください。

Chr(13) & Chr(10) は改行です。

タイトルRe^4: レポートでの並び替えについて
記事No83204
投稿日: 2017/12/02(Sat) 09:40
投稿者
解決済: ON
hatenaさん、指摘通りにやってみました。

1.デザインビューでやれば何個でもいけるんですね、知りませんでした。

2.そこで質問ですが・・・
  行見出しに「区分」をするということですが、新たに追加するということですか?

3.曜日フィールドに [区分1]Chr(13)〜 を入力するということですよね?

4.これで実行してみたら下記のメッセージが出ました。

クロス集計クエリを作成するには、1つまたは複数の行見出しオプション、1つの列見出しオプション、1つの値オプションを指定する必要があります。

これは何でしょうか?

何回も申し訳ありませんです。

タイトルRe^5: レポートでの並び替えについて
記事No83205
投稿日: 2017/12/02(Sat) 16:28
投稿者hatena
解決済: ON
> 2.そこで質問ですが・・・
>   行見出しに「区分」をするということですが、新たに追加するということですか?

「区分」フィールドはありませんでしたね。それはなくていいです。

あと、「日付」ですが、これを行見出しにしてしまうと、曜日を列見出しにする意味がないですね。
質問の例だと、

> 店名 品名  区分   日付    月曜日 火曜日 水曜日 木曜日 金曜日 土曜日 日曜日
> A店  A001  1       2017/11/01      1     4     6      2

2017/11/01 の曜日は決まっているので、このような出力結果は矛盾してますよね。

このあたり、もう少し具体的にやりたいことを整理して説明し直してもらえますか。

例えば、日付を行見出しにするのではなく、週単位(その年の第何週目)の見出しにするとか。

 
回答は、とりあえず上記の説明を見てからにします。

あと、レポートのもとにあるテーブルのフィールド名(データ型)、主キー設定、も提示してください。

タイトルRe^6: レポートでの並び替えについて
記事No83206
投稿日: 2017/12/03(Sun) 07:36
投稿者
解決済: ON
hatenaさんありがとうございます。
指摘されて私もどうまとめたらいいのか頭がパニックになっています。
再度、まとめなおしてから質問させていただきます。
ご迷惑をおかけしますが、また宜しくお願いいたします。

タイトルRe^6: レポートでの並び替えについて
記事No83215
投稿日: 2017/12/11(Mon) 11:49
投稿者
解決済: ON
hatenaさんできました。

原始的ですが、曜日毎にクエリを作って(日付も付けて)、それをユニオンでくっつけました。

ごちゃごちゃと混乱させてしまいまして申し訳ありません。

また、よろしくお願いいたします。

タイトルRe^7: レポートでの並び替えについて
記事No83216
投稿日: 2017/12/11(Mon) 13:49
投稿者hatena
解決済: ON
> hatenaさんできました。

それは、よかったです(*^_^*)

> 原始的ですが、曜日毎にクエリを作って(日付も付けて)、それをユニオンでくっつけました。
>
> ごちゃごちゃと混乱させてしまいまして申し訳ありません。


結局、どのような結果が欲しくて、
どのような方法で実現したのか、
よく分かりません。。

こちらも、それなりの時間を割いて考えてきたので、
今後のためにもどのように解決したのか結果が知りたいです。

よろしくおねがいします。

タイトルRe^8: レポートでの並び替えについて
記事No83217
投稿日: 2017/12/11(Mon) 14:10
投稿者
解決済: ON
hatenaさん、書き方がまずくて申し訳ありません。
どうしても縦から横ができなかったので、最初から横並びでデータを作りました。
それを縦にするようにしました。

下記はhatenaさんにお願いしました質問です。

***********************************************************

店名 品名  日付    曜日  区分1  区分2 区分3
A店  A001 2017/11/01 月曜日  1    0   2
A店  A001 2017/11/02 火曜日  4    0   4 
A店  A001 2017/11/03 水曜日  6    0   1 
A店  A001 2017/11/04 木曜日  2    0   2  

  下に各店舗ごとに 1週分が表示されます

これを

店名 品名  区分   日付    月曜日 火曜日 水曜日 木曜日 金曜日 土曜日 日曜日
A店  A001  1 2017/11/01 1 4 6 2
2 0 0 0 0
3 2 4 1 2
B店  A001

***********************************************************************

これを最初から

店名 品名   日付   月区分1 月区分2 月区分3 火区分1 火区分2 火区分3 
A店  A001 YYMMDD 1 2 2 4 0 4  

上記のように最初のテーブルを横並びで作りました。
ただどうしてもこれの縦並びも欲しかったので

月区分1、月区分2、月区分3 の曜日ごとのクエリを作成し、それをユニオンで合体させて
うまくいきました。

ただ、縦を横にもしてみたいのですがなかなかうまくできません。

書き方がまずくて申し訳ありません。

タイトルRe^9: レポートでの並び替えについて
記事No83218
投稿日: 2017/12/12(Tue) 00:33
投稿者hatena
解決済: ON
> これを最初から
>
> 店名 品名   日付   月区分1 月区分2 月区分3 火区分1 火区分2 火区分3 
> A店  A001 YYMMDD 1 2 2 4 0 4  

例えば、日付が 2017/12/11 だとすると、月曜日ですので、
月区分1 月区分2 月区分3に数値が入るのは分かるのですが、
火区分1 火区分2 火区分3 にも数値が入るのはなぜでしょうか。

2017/12/11 を起点とする一週間分を1レコードにしているということでしょうか。

つまり、
火区分1 火区分2 火区分3 には、2017/12/12 のデータ、
水区分1 水区分2 水区分3 には、2017/12/13 のデータ、
ということでしょうか。

ということを前回の投稿では確認したかったのです。

もしそうだとすると、このようなテーブル構成にすると、
レポート表示はでしょうが、
集計したり検索したりなど、データベースとして使う場合、
とても効率の悪いものになります。

とりあえず上記の私の推測があっているかどうか回答ください。
違っているなら、どう違っているのか説明してください。

そうすれば、より適切な方法を提案できると思います。

> 上記のように最初のテーブルを横並びで作りました。
> ただどうしてもこれの縦並びも欲しかったので
>
> 月区分1、月区分2、月区分3 の曜日ごとのクエリを作成し、それをユニオンで合体させて
> うまくいきました。

これは非常に効率の悪い方法ですね。

やはり、テーブル設計はデータベースの設計原則(正規化)にそったものにして、
クエリやレポートの機能で希望のレイアウトに変換するという設計にすべきです。

タイトルRe^9: レポートでの並び替えについて
記事No83219
投稿日: 2017/12/12(Tue) 12:14
投稿者hatena
解決済: ON
下記のような仕様だとして、回答します。

1行は週単位
日付はその週の月曜日の日付を表示
列名は、月区分1,月区分2,月区分3,火区分1,火区分2,火区分3・・・・・日区分1,日区分2,日区分3

まず、テーブル設計ですが、データベースではこれが重要です。
RDBのテーブル設計の原則は「正規化」です。
これはWEB検索するなどして、勉強してもらうとして、
今回の場合は、下記のようなテーブルにすべきです。


店名	品名	日付	区分	数値
---------------------------------------------
A店	A001	2017/12/04	1	1
A店	A001	2017/12/04	3	2
A店	A001	2017/12/05	1	4
A店	A001	2017/12/05	2	4
A店	A001	2017/12/06	1	6
A店	A001	2017/12/06	3	1
A店	A001	2017/12/07	1	2
A店	A001	2017/12/07	3	2

基本は、同じ性質のデータは縦に並ぶように設計する。

※店名マスターテーブル、商品マスターテーブルを別途作成して、店名コード、商品コードをフィールドにするべきですが、それはとりあえず置いておきます。

このテーブルからクロス集計クエリを作成します。

フィールド/集計 /行列の入れ替え
店名 /グループ化/行見出し
品名 /最小 /行見出し
日付 /最小/行見出し
週: DatePart("ww",[日付],2)/グループ化/行見出し
列名: Format([日付],"aaa") & "区分" & [区分]/グループ化/列見出し
数値/合計 /値

クエリのデザインビューの上部の背景部分をクリックしてクエリプロパティを表示させます。
その「クエリ列見出し」を下記のように設定します。

月区分1,月区分2,月区分3,火区分1,火区分2,火区分3,水区分1,水区分2,水区分3,木区分1,木区分2,木区分3,金区分1,金区分2,金区分3,土区分1,土区分2,土区分3,日区分1,日区分2,日区分3

このクロス集計クエリを開けばご希望の結果になります。

店名	品名	日付の最小	週	月区分1	月区分2	月区分3	火区分1	火区分2	火区分3	水区分1	水区分2	水区分3	・・・
A店	A001	2017/12/04	50	1		2	4	4		6		1

SQLビューなら、

TRANSFORM Sum(数値) AS 数値の合計
SELECT 店名, 品名, Min(Tbl.日付) AS 日付, DatePart("ww",[日付],2) AS 週
FROM Tbl
GROUP BY 店名, 品名, DatePart("ww",[日付],2)
PIVOT Format([日付],"aaa") & "区分" & [区分]
 In ("月区分1","月区分2","月区分3","火区分1","火区分2","火区分3","水区分1","水区分2","水区分3","木区分1","木区分2","木区分3","金区分1","金区分2","金区分3","土区分1","土区分2","土区分3","日区分1","日区分2","日区分3");

週でグループ化するために 
週: DatePart("ww",[日付],2)
というフィールドを作成してます。

DatePart 関数 - Access
https://support.office.com/ja-jp/article/DatePart-%E9%96%A2%E6%95%B0-26868a79-5505-4e5a-8905-6001372223fa

タイトルRe^10: レポートでの並び替えについて
記事No83220
投稿日: 2017/12/12(Tue) 16:22
投稿者
解決済: ON
そうなんですね。やはり最初の作り方が変なのだと思います。
hatenaさんのおっしゃるように縦並びが基本なんですよね。
もう一回作り直してみます。
初めてのAccessなので行ったり来たりで時間がかかりますが、また宜しくお願いいたします。

タイトルRe^11: レポートでの並び替えについて
記事No83221
投稿日: 2017/12/12(Tue) 17:07
投稿者hatena
解決済: ON
> そうなんですね。やはり最初の作り方が変なのだと思います。
> hatenaさんのおっしゃるように縦並びが基本なんですよね。
> もう一回作り直してみます。

それがいいと思います。

今回のレポートが曜日と区分が列名なので、それに合わせてテーブルを設計してしまうと、
もし、下記のような一覧結果が欲しいという要望がきたらどうしますか。

店名 年月 区分1 区分2 区分3
A店 2017/2 100 200  50

現状のテーブルだと実現するにはおそろしく複雑なクエリが必用になります。
前回の回答の正規化されたテーブルだと、クロス集計クエリで行列値を適切に設定すればすくできます。

正規化されたテーブルなら集計や抽出などのデータ操作が簡単に実現できます。

タイトルRe^12: レポートでの並び替えについて
記事No83222
投稿日: 2017/12/12(Tue) 17:17
投稿者
解決済: ON
hatenaさん、ありがとうございます。
さっそく最初から作り直しています。
親切丁寧にありがとうございます。本当に助かります。
またよろしくお願いいたします。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る