• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Accessの文字列部分一致を合計する関数)

Accessの文字列部分一致を合計する関数

このQ&Aのポイント
  • Access2003のクエリで、「同じフィールド内で文字列が部分一致した場合、別のフィールドにある数値を合計する」という関数を設定したい。
  • 具体的には、在庫テーブルから新しいクエリで、「商品コード」フィールドの左3文字が一致した場合、「在庫」フィールドの数値を合計し、「在庫合計」フィールドに表示したい。
  • クエリの実行結果では、「商品コード」と「在庫合計」の値が一致する商品コードが表示され、一致しない場合はそのままの数値が表示される。

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

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

アクセスでもエクセルでも、一発でやろうと思うと結構厳しいので、 とりあえずアクセスでクエリを二つ使って何とかこなす方法を紹介します。 まず、集計クエリ「Q_商品分類」を作ります。 フィールドは ・「分類: Mid([商品コード],1,3)」これをグループ化 ・「在庫の合計: 在庫」これの合計を算出 SQL文だと SELECT Mid([商品コード],1,3) AS 分類, Sum(Sheet1.在庫) AS 在庫の合計 FROM Sheet1 GROUP BY Mid([商品コード],1,3); と言う感じです。 これを利用して、DLookup関数を使ったクエリを作ります。 フィールドは ・「商品コード」 ・「在庫」 ・「在庫合計: DLookUp("[在庫の合計]","Q_商品分類","[分類]='" & Mid([商品コード],1,3) & "'")*1」 以上の三つで、SQL文だと SELECT Sheet1.商品コード, Sheet1.在庫, DLookUp("[在庫の合計]","Q_商品分類","[分類]='" & Mid([商品コード],1,3) & "'")*1 AS 在庫合計 FROM Sheet1; こんな感じです。 ひとまず、参考までに。

yy1192
質問者

補足

ご回答ありがとうございます。一点、追加で質問させてください。 「これを利用して、DLookup関数を使ったクエリを作ります。」からの内容なのですが、これは「在庫テーブル」と新しく作った「Q_商品分類」の2つをクエリのデザインビューで表示し、リレーションを設定するということでしょうか? 初歩的な質問かもしれませんが、ご教授ください。 よろしくお願いいたします。

その他の回答 (2)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

商品コードが3文字限定ですが、 SELECT 商品コード, 在庫, Sum(IIf(Left([在庫],3)=[在庫],[在庫],0)) AS 在庫合計 FROM 在庫テーブル GROUP BY 商品コード, 在庫; とかでも?

yy1192
質問者

補足

ご回答ありがとうございました。 SQL文も実はほとんど触ったことがないので、大変申し訳ないですが、クエリのデザインビューでの方法をご教授いただけないでしょうか? よろしくお願いいたします。 (ただ、今回いただいた内容は、勉強も兼ねて行ってみます。)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

提示されたサンプルでは以下のような結果になりますが、それで良いでしょうか 商品コード 在庫  在庫合計 aaa    10    50 aaa-1   40    50 bbb    20    45 bbb-1   25    45 ccc    15    15 ddd    30    50 ddd-1   20    50 テーブル名を「TJ」と仮定します。 クエリのSQLビューに以下を記述します。 SELECT Q1.商品コード, Q1.在庫, Sum(Q2.在庫) AS 在庫合計 FROM TJ AS Q1 INNER JOIN (SELECT LEFT(商品コード,INSTR(商品コード & "-","-")-1) AS 頭コード, 在庫 FROM TJ) AS Q2 ON LEFT(Q1.商品コード,INSTR(Q1.商品コード & "-","-")-1)=Q2.頭コード GROUP BY Q1.商品コード, Q1.在庫; つまり、元々のテーブルと、「商品コード」左側("-" 前までの文字)のテーブルもどきを結合して、 集計で在庫合計を求めます。 LEFT(商品コード,INSTR(商品コード & "-","-")-1) AS 頭コード では、必ず "-" が存在する様にして "-" 前の文字列を取得しておきます。 ( aaa-1 なら aaa を抽出すように・・・) ※ よって、3文字に限定していません( "-" の左側を対象に・・・・) そこで、元のテーブルの LEFT(Q1.商品コード,INSTR(Q1.商品コード & "-","-")-1) と テーブルもどきの LEFT(商品コード,INSTR(商品コード & "-","-")-1) AS 頭コード とを結び付け 元々の「商品コード」と「在庫」でグループ化した際に在庫合計を計算しておきます。 ※ この説明でわかったでしょうか?? ※ 左3文字に限定するのであれば、 LEFT(商品コード,INSTR(商品コード & "-","-")-1) AS 頭コード 上記部分を LEFT(商品コード,3) AS 頭コード に変更してみてください。 なお、 > ※ただ、商品コードに重複がございます。(上記例でいうと商品コードが「bbb」です。) この部分は意味不明です。(サンプルに無いデータが実行結果に出てきています) が、上記クエリでは統合されます。

yy1192
質問者

補足

ご回答ありがとうございました。 SQL文も実はほとんど触ったことがないので、大変申し訳ないですが、クエリのデザインビューでの方法をご教授いただけないでしょうか? よろしくお願いいたします。 (ただ、今回いただいた内容は、勉強も兼ねて行ってみます。)

関連するQ&A