• ベストアンサー

Access カウント

3種類の売上があるのですが売上0以外の数を数え業態でグループ化する場合 7つのクエリが必要だと思うのですが間違っていないでしょうか? 売上の抽出条件にnot 0指定したクエリを3つを作成します。 抽出クエリ1 抽出クエリ2 抽出クエリ3 このクエリから新たなクエリを作成しさらに業態でグループ化し売上をカウント指定します。 業態別カウントクエリ1 業態別カウントクエリ2 業態別カウントクエリ3 このクエリから新たなクエリを作成。 業態で結合、フィールドに各業態別売上カウント、業態名を設定。 グループ化したクエリに抽出条件を指定しても駄目だということに最近気づきました・・・。

  • sskj
  • お礼率24% (75/303)

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

  • ベストアンサー
noname#140971
noname#140971
回答No.4

補足: 7つのクエリ方式と同じですよ。 DBLookup()では、3つの集計クエリを実行しているのと同じ。 3つのSELECT文は、その次の3つのクエリと同義。 最後の集計クエリは、SELECT文をUNION結合することで実現しています。 そういうことで、質問者のアプローチは基本的に回答3に同じです。 注意:UNIONを使ったクエリはSQLビューでSQL文をタイプすることで生成できます。

その他の回答 (4)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.5

原因は分かっておられるようですね >売上a 売上b 売上c こういうテーブルを扱うには 一度 >売上 >売上a >売上b >売上c >・ こういう形に組み替えてから扱えば、普通に扱えます 組み換えにはユニオンクエリを使います もちろんテーブルを作りかえるのが最良の方法ですよ

noname#140971
noname#140971
回答No.3

クエリ: 業態__売上件数a___売上件数b 売上件数c ____1______________2_______________2_____________1 ____2______________2_______________1_____________0 ____3______________0_______________1_____________1 テストでは、業態を1,2,3で格納しています。 が、こういうクエリ結果を得るには一つのクエリでOKです。 SELECT 業態,       DBCount("売上_a", "売上履歴", "業態=1 AND 売上_a>0") AS 売上件数a,       DBCount("売上_b", "売上履歴", "業態=1 AND 売上_b>0") AS 売上件数b,       DBCount("売上_c", "売上履歴", "業態=1 AND 売上_c>0") AS 売上件数c       FROM 売上履歴 WHERE 業態=1 UNION SELECT 業態,       DBCount("売上_a", "売上履歴", "業態=2 AND 売上_a>0") AS 売上件数a,       DBCount("売上_b", "売上履歴", "業態=2 AND 売上_b>0") AS 売上件数b,        DBCount("売上_c", "売上履歴", "業態=2 AND 売上_c>0") AS 売上件数c       FROM 売上履歴 WHERE 業態=2 UNION SELECT 業態,       DBCount("売上_a", "売上履歴", "業態=3 AND 売上_a>0") AS 売上件数a,       DBCount("売上_b", "売上履歴", "業態=3 AND 売上_b>0") AS 売上件数b,       DBCount("売上_c", "売上履歴", "業態=3 AND 売上_c>0") AS 売上件数c FROM 売上履歴 WHERE 業態=3; 邪道と言えば邪道でしょうが、クエリを複雑化するよりも集計関数を自作すると言う手があります。 そうすれば、余り考えずに目で見たら判るクエリが書けると思います。 Public Function DBCount(ByVal strField As String, _             ByVal strTable As String, _             Optional ByVal strWhere As String = "", _             Optional ByVal ReturnValue = 0) As Variant On Error GoTo Err_DBCount    Dim N    Dim strQuerySQL As String    Dim rst     As ADODB.Recordset    Set rst = New ADODB.Recordset    strQuerySQL = "SELECT COUNT(" & strField & ") FROM " & strTable    If Len(strWhere) > 0 Then      strQuerySQL = strQuerySQL & " WHERE " & strWhere    End If    With rst      .Open strQuerySQL, _         CurrentProject.Connection, _         adOpenStatic, _         adLockReadOnly      If Not .BOF Then        .MoveFirst        N = .Fields(0)      End If    End With Exit_DBCount: On Error Resume Next    rst.Close    Set rst = Nothing    DBCount = IIf(N <> 0, N, ReturnValue)    Exit Function Err_DBCount:    MsgBox "SELECT 文の実行時にエラーが発生しました。(DBCount)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"    Resume Exit_DBCount End Function

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

テーブルの説明無しにいきなりクエリ云々といわれても何のことかわかりませんよ 普通7つもクエリを重ねなきゃいけないなんてことにはなりませんね そのようになる原因として考えられる第一はテーブル設計ミスです ということでテーブルの情報が必須です

sskj
質問者

補足

仰るとおりテーブル設計に問題があります。 売上 売上a 売上b 売上c ・ ・ とするところを 売上a 売上b 売上c としている所に問題があるようです。 テーブル設計を直すとなると時間がかかりますが 直したほうがよさそうですね。 最終結果を ID_売上a_売上b_売上_c としたいのでクロス集計で直す必要がありますね。 これは最終結果をAccessのレポートではなく Wordの差込印刷を使う関係上の問題と 売上a/売上bなどの計算する必要があるからです。

noname#140971
noname#140971
回答No.1

売上履歴: ID__区分___数量___金額 01__業態1_____1____\100 02__業態2_____2____\200 03__業態3_____3____\300 04__業態1____10__\1,000 05__業態2____20__\2,000 クエリ1: 売上件数___区分 __________2____業態1 __________2____業態2 __________1____業態3 SELECT Count(*) AS 売上件数 , 区分 FROM 売上履歴 GROUP BY 区分 ORDER BY 区分; このようにテーブル設計の関連部と目的のクエリを示されないと・・・。 読みようでは、単なる集計関数をGROUP BY 節とともにSELECT文と組み合わせて使う処理とも・・・。

sskj
質問者

補足

テーブル ID_売上a_売上b_売上c_業態 01_100__200____0__業態1 02_200_____0_____0__業態2 03____0__400__200__業態3 04_400__600_____0__業態2 05_500__700__300__業態1 クエリ結果 業態_売上件数a_売上件数b_売上件数c 業態1_2____________2_______1___ 業態2_2____________1_______0___ 業態3_0____________1_______1___ テーブルと最終的な結果を現すとこのような形です。 業態で結合すると0件の部分が消えてしまうので駄目ですね・・。 現状 業態_売上件数a_売上件数b_売上件数c 業態1_2__________2________1_____

関連するQ&A

  • ACCESSで集計カウント0件の場合1と入力される

    再度質問箱に投稿します!Access2000で顧客管理をしているのですが毎日入力している顧客データーの顧客カルテNOからクエリの集計クエリで 一日の人数をカウントしているのですが、来店客が0人の時は0と入力しても1とカウントしてしまいます これを0人とカウントしないと集計結果が間違えてしまいます、どの様にすれば来店客が0人の時集計クエリで0とされるでしょうか? こんな感じです 顧客来店テーブル No カルテNO 日付 名前 etc.....でカルテNOはテキスト型で日付は日付/時刻型です 顧客来店テーブルから顧客来店日の日付別売上集計クエリに日付とカルテNOのフィールドを作って 日付をグループ化してカルテNOをカウントしています 顧客来店日の日付別売上集計クエリ  日付    カルテNO グループ化  カウント 顧客来店テーブルのカルテNOを0と入力すると 顧客来店日の日付別売上集計クエリのカルテNOのカウントで集計結果が0ではなく1と返されるのです、 前回お回答をしてもらった方法で 集計 Where条件 抽出条件 <>"0"にすると日付が無くなってしまいます これですと月の集計をした時に営業日数などが間違ってしまいます、 どの様にすればいいか解らないです、宜しくお願いします

  • アクセス クエリ

    アクセス クエリの抽出について教えて下さい。例えば、1つのクエリの中に数値のフィールドが5つ作成してあり、それぞれ違うフィールドの抽出条件をしています。それぞれの条件を入れてしまうと5つのフィールド条件全てに合ったものしか抽出できません。 5つのフィールドのうち、どれでも1つ一致したら抽出できるようにしたいのですが良い方法を教えて下さい。宜しくお願いします。

  • アクセスでの年度別集計

    教えてください。 売上データの支店別・品目別の年間売上の集計を出したいのですが、売上年と売上月は別のフィールドになっています。下記の様な感じで・・・ CD 支店名 品目 売上金額 売上年 売上月  2004年度(2004/4/1~2005/3/31)の品目別売上合計を出したいのです。 クエリは売上フィールドで集計し、抽出条件を、  売上年    売上月  2004      >=4    2005       <=3 にしてみたのですが、そうすると品目の合計にはなりません。(同じ品目でも売上月が違えば別のレコードになります) わかりにくい説明で申し訳ありませんが、困っています。よろしくお願いします。

  • Accessのクエリで、CStr関数を使った項目のグループ化と抽出のエラー

    アクセスで「TEST1」という名のクエリでCStr関数を使って数値を文字型にしている「項目1」という名のフィールドがあります。(他にもフィールドはあります) 別のクエリ(「TEST2」)で、「TEST1」クエリを使って、「項目1」フィールドをグループ化し、さらに抽出条件に『 "1" 』と入れて実行したところ、 『集計関数の一部として指定された式 '[TEST1].項目1="1"' を含んでいないクエリを実行しようとしました。』 とメッセージが出て実行できませんでした。 ◎ 数値を文字型にしたものをグループ化しさらに抽出条件で絞り込みたいのですが、どうしたらいいのでしょうか? 「TEST1」クエリをテーブルにしないで実行したいのですが。。。 わかる方がいらっしゃったら、教えてください。よろしくお願いします。

  • アクセス オプショングループで選択した条件を抽出

    先に条件を指定するフォームを作成します。 その条件の指定には、オプショングループを使います。 そのフォームに基づいたクエリを作成したいです。 例えば、国語・算数・英語 の中から一つを選択させるオプショングループを作成しておきます。 そこで選択された科目のみを抽出させるクエリを作りたいです。 (すでに氏名・科目・点数等入ったレコードソースはあります) クエリの抽出条件にはなんと入力すればよいのでしょうか。 どうぞよろしくお願いします。

  • ACCESSのテーブル【住所録】で名字毎に何人いるかカウントしたい

    技術が未熟なため、大変困っています。助けてください。 MS ACCESS2002 のデータベースで【住所録】があるとします。 【住所録】テーブルには『氏名』、『住所』の2つのフィールドがあります。 『氏名』フィールドには鈴木_太郎、田中_幸子、佐藤_一郎、等アンダーバーで名字と名前を区切ったフルネームが入っています。 ここからが質問です。 『氏名』の名字だけをグループ化してカウントして新たなクエリーを作れないでしょうか。 例えば、【住所録】を元に、 名字(フルネームの名字のみグループ化)  人数(名字をカウント) 田中                  110 鈴木                  90 佐藤                  78 というクエリができないでしょうか。 あと何かクエリ以外で別のアプローチもあればご教授頂きたいです。 宜しくお願いします。

  • ACCESSでの抽出について

    単純なクエリの抽出なのですが・・・。 区フィールド、町フィールドをクエリで作成して そのクエリを元に抽出フォームを作成しました。 そして、クエリの抽出条件に以下の式を入力しました。 Like "*" & [Forms]![F_抽出]![区] & "*" Like "*" & [Forms]![F_抽出]![町] & "*" しかし、大本のデータに [区]フィールド→品川区 [町]フィールド→空白 ・・・と、どちらかが空白の場合、そのレコード を抽出してくれません。 このように、空白フィールドを持つレコードをも 抽出するにはどのようにしたらようですか? 初歩的な質問で申し訳ありませんがよろしくお願いいたします。

  • Accessで任意のテーブルのフィールド値をクエリの抽出条件にできますか?

    Accessで任意のテーブルのフィールド値をクエリの抽出条件にできますか? 工程管理のAccessDBがあり、毎日更新される工程を管理するため、数種類の選択クエリを作成しています。 そのクエリからExcelのデータベースクエリを使ってExcelシートにクエリ毎に各シートに取り込んでいます。 Accessクエリは不定期で抽出条件を変更しています。 抽出条件はどのクエリでも同時に同じものを使うところが多いため、任意に入力した値を抽出条件に指定できれば、一度で全クエリの抽出条件を変更できるのではないかと考えています。 色々調べてもフォームを使った方法は紹介されていますが、上記の条件下でいい方法はないでしょうか? 抽出条件は『Is Null Or >#2008/06/30#』のような感じです。

  • Access集計クエリについて

    Access集計クエリについて質問です。 (例) [フィールド名] りんご バナナ オレンジ りんご りんご バナナ ↓ <抽出条件> [フィールド名]   集計:[フィールド名] グループ化     カウント とすると、 ↓ <抽出結果> [フィールド名]   集計 りんご        3 バナナ        2 オレンジ       1 となります。 上記抽出結果を基に、集計カウント数が「3」の場合はOK、それ以外はNGというフィールドを追加したいのですが、その時の抽出条件はどうすればいいのでしょうか? <抽出結果> [フィールド名]   集計   判定 りんご        3     OK バナナ        2     NG オレンジ       1     NG Access初心者です。 どうぞよろしくお願いいたします。

  • アクセス2000で、DBの0と空白以外の行数をカウントしたい

    いつもお世話になります。 アクセス初心者で、恐らく以前にも同じような質問があったと思うのですが、過去の回答を見てもどうしても分からなかったので教えていただけますでしょうか。 DBの1列目には"店舗名"2列目には"商品名"3列目には"売上数量"があります。1コも売れなかった場合は"0"か空白になっています。「店舗別に商品が何種類売れたか」をカウントしたいのです。 クエリで、"店舗名"をグループ化、"売上数量"をカウントすることまでは分かるのですが、「"0"と空白を除外してカウントする」方法が分かりません。 お手数をおかけしますが、手順を教えていただけますでしょうか。

専門家に質問してみよう