Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1563 / 2272 ツリー ←次へ | 前へ→

【6476】クロス集計で累計を出すには うっち 05/10/13(木) 22:46 質問[未読]
【6480】Re:クロス集計で累計を出すには 小僧 05/10/14(金) 8:54 発言[未読]
【6497】Re:クロス集計で累計を出すには うっち 05/10/15(土) 22:08 質問[未読]
【6499】Re:クロス集計で累計を出すには 小僧 05/10/16(日) 2:41 回答[未読]
【6503】Re:クロス集計で累計を出すには うっち 05/10/16(日) 17:35 質問[未読]
【6504】Re:クロス集計で累計を出すには 小僧 05/10/16(日) 18:53 発言[未読]
【6505】Re:クロス集計で累計を出すには うっち 05/10/16(日) 20:00 お礼[未読]

【6476】クロス集計で累計を出すには
質問  うっち  - 05/10/13(木) 22:46 -

引用なし
パスワード
   Access初心者です。よろしくお願いします。

テーブル1に下の項目でデータが5年分65000000件程あります。
管理番号 発生年月日 数量
管理番号をグループ化して行見出しにし、列見出しを発生年月日(5年分)にして、各数量の合計を集計するクロス集計クエリは作れるのですが、数量を累計にしたい場合どのようにすれば良いでしょうか?

色々調べたのですが、良い方法が分らず、クロス集計クエリを元に新しいクエリを作成して、5年分の累計列見出しを作り関数で加算するように作ったのですが、途中に数量の無い場合、それ以降の累計が空白になってしまいました。
クロス集計にもどりNZ関数でNull値を「0」と表示させて作りましたが、
2001/01  2001/02  2001/03  2001/01累計 2001/02累計 2001/03累計
   7     0     0       7     70     700
と表示されてしまいます。
仕方なく新しいクエリでIIF関数を使い。IsNullの場合は0に置き換えて計算するようにしました。
もっと良い方法があるのではと思うのですが、どなたかご存知でしたらご指導をお願い致します。
分りづらい説明でも申し訳ありません。

【6480】Re:クロス集計で累計を出すには
発言  小僧  - 05/10/14(金) 8:54 -

引用なし
パスワード
   ▼うっち さん:
おはようございます。

>管理番号をグループ化して行見出しにし、
>列見出しを発生年月日(5年分)にして、
>各数量の合計を集計するクロス集計クエリは作れるのですが、
>数量を累計にしたい場合どのようにすれば良いでしょうか?

クロス集計クエリの縦計を出したい、という事でしょうか?

もしそのようでしたら…。

まず、クエリに縦計を持たす必要があるかどうかです。
そのクロス集計クエリを基にフォームやレポートを作成するのであれば、
フォームやレポートの方で計算させた方がスマートに処理できると思います。

もしどうしてもクエリで縦計まで合わせたものが必要なのでしたら、
年、月ごとの合計だけを表示するクエリを作成して、
基のクエリとユニオンクエリを使って結合する手もありかと思います。

まったく見当外れの話でしたら申し訳ないです。

【6497】Re:クロス集計で累計を出すには
質問  うっち  - 05/10/15(土) 22:08 -

引用なし
パスワード
   ▼小僧 さん:
ご指導ありがとうございます。
テーブル1が
管理番号   発生年月日   数量
123456     200110     5
123456     200111     6
123456     200112     7
 ・       ・      ・
 ・       ・      ・
 ・       ・      ・
このようになっていてクロス集計で
管理番号  200110  200111   200212
123456     5     11    18
 ・       ・      ・
 ・       ・      ・
 ・       ・      ・
といった感じにしたいのです。
説明が悪くて申し訳ありません。 

>▼うっち さん:
>おはようございます。
>
>>管理番号をグループ化して行見出しにし、
>>列見出しを発生年月日(5年分)にして、
>>各数量の合計を集計するクロス集計クエリは作れるのですが、
>>数量を累計にしたい場合どのようにすれば良いでしょうか?
>
>クロス集計クエリの縦計を出したい、という事でしょうか?
>
>もしそのようでしたら…。
>
>まず、クエリに縦計を持たす必要があるかどうかです。
>そのクロス集計クエリを基にフォームやレポートを作成するのであれば、
>フォームやレポートの方で計算させた方がスマートに処理できると思います。
>
>もしどうしてもクエリで縦計まで合わせたものが必要なのでしたら、
>年、月ごとの合計だけを表示するクエリを作成して、
>基のクエリとユニオンクエリを使って結合する手もありかと思います。
>
>まったく見当外れの話でしたら申し訳ないです。

【6499】Re:クロス集計で累計を出すには
回答  小僧  - 05/10/16(日) 2:41 -

引用なし
パスワード
   ▼うっち さん:
こんばんは。

>テーブル1が
>管理番号   発生年月日   数量
>123456     200110     5
>123456     200111     6
>123456     200112     7

という事ですので、
まずはこのテーブルを元に累計数量を算出するクエリを作成してみましょう。

SELECT
テーブル1.管理番号,
テーブル1.発生年月日,
DSum("数量","テーブル1","管理番号 = " & [管理番号] & " AND
発生年月日 <= " & [発生年月日]) AS 累計数量
FROM テーブル1;

上記 SQL をクエリの SQL ビューに貼り付けると、

管理番号   発生年月日   累計数量
123456     200110     5
123456     200111     11
123456     200112     18

のようになりませんでしょうか。

後はこのクエリをクロス集計クエリへと変換してみましょう。

クロス集計クエリとなると、
フィールドの名前が半角数値のみとなってしまいます。
後々誤作動の元となりますので、ちょっと名前を変えておきましょう。


TRANSFORM Sum(DSum("数量","テーブル1","管理番号 = " & [管理番号] & " AND
発生年月日 <= " & [発生年月日])) AS 累計数量
SELECT テーブル1.管理番号
FROM テーブル1
GROUP BY テーブル1.管理番号
PIVOT Left([発生年月日],4) & "年" & Right([発生年月日],2) & "月";

【6503】Re:クロス集計で累計を出すには
質問  うっち  - 05/10/16(日) 17:35 -

引用なし
パスワード
   ▼小僧 さん:
何度もありがとうございます。早速試してみましたが、始めに発生年月日が昇順になっていなかったからか、うまくいかず、昇順にしてからやってみたのですが、
"クエリ式'管理番号=102356発生年月日<=200102'構文エラー:演算子がありません"と出てしまいます。何処が悪いのでしょうか?
何度も質問して申し訳ありません。
>▼うっち さん:
>こんばんは。
>
>>テーブル1が
>>管理番号   発生年月日   数量
>>123456     200110     5
>>123456     200111     6
>>123456     200112     7
>
>という事ですので、
>まずはこのテーブルを元に累計数量を算出するクエリを作成してみましょう。
>
>SELECT
>テーブル1.管理番号,
>テーブル1.発生年月日,
>DSum("数量","テーブル1","管理番号 = " & [管理番号] & " AND
>発生年月日 <= " & [発生年月日]) AS 累計数量
>FROM テーブル1;
>
>上記 SQL をクエリの SQL ビューに貼り付けると、
>
>管理番号   発生年月日   累計数量
>123456     200110     5
>123456     200111     11
>123456     200112     18
>
>のようになりませんでしょうか。
>
>後はこのクエリをクロス集計クエリへと変換してみましょう。
>
>クロス集計クエリとなると、
>フィールドの名前が半角数値のみとなってしまいます。
>後々誤作動の元となりますので、ちょっと名前を変えておきましょう。
>
>
>TRANSFORM Sum(DSum("数量","テーブル1","管理番号 = " & [管理番号] & " AND
>発生年月日 <= " & [発生年月日])) AS 累計数量
>SELECT テーブル1.管理番号
>FROM テーブル1
>GROUP BY テーブル1.管理番号
>PIVOT Left([発生年月日],4) & "年" & Right([発生年月日],2) & "月";

【6504】Re:クロス集計で累計を出すには
発言  小僧  - 05/10/16(日) 18:53 -

引用なし
パスワード
   ▼うっち さん:
こんにちは。

>始めに発生年月日が昇順になっていなかったからか、うまくいかず、

ソートしていなくても大丈夫ですよ^^。


>"クエリ式'管理番号=102356発生年月日<=200102'
>構文エラー:演算子がありません"と出てしまいます。

'管理番号=102356 発生年月日<=200102'
         ^
ここに半角スペースがないのが気になりますね。後、本来

'管理番号=102356 AND 発生年月日<=200102'

となるようにクエリを作成したつもりなのですが、
どこか「 AND 」を抜かしてしまった場所はありませんでしょうか?

【6505】Re:クロス集計で累計を出すには
お礼  うっち  - 05/10/16(日) 20:00 -

引用なし
パスワード
   ▼小僧 さん:
ありがとうございます。無事に動作しました!
発生年月日をテキスト型にしていたのがいけなかったようで、数値型に変更してうまく動作できました。
親切にご指導頂いてありがとうございました!!

>▼うっち さん:
>こんにちは。
>
>>始めに発生年月日が昇順になっていなかったからか、うまくいかず、
>
>ソートしていなくても大丈夫ですよ^^。
>
>
>>"クエリ式'管理番号=102356発生年月日<=200102'
>>構文エラー:演算子がありません"と出てしまいます。
>
>'管理番号=102356 発生年月日<=200102'
>         ^
>ここに半角スペースがないのが気になりますね。後、本来
>
>'管理番号=102356 AND 発生年月日<=200102'
>
>となるようにクエリを作成したつもりなのですが、
>どこか「 AND 」を抜かしてしまった場所はありませんでしょうか?

1563 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078230
(SS)C-BOARD v3.8 is Free