- ベストアンサー
Accessの文字列部分一致を合計する関数
- Access2003のクエリで、「同じフィールド内で文字列が部分一致した場合、別のフィールドにある数値を合計する」という関数を設定したい。
- 具体的には、在庫テーブルから新しいクエリで、「商品コード」フィールドの左3文字が一致した場合、「在庫」フィールドの数値を合計し、「在庫合計」フィールドに表示したい。
- クエリの実行結果では、「商品コード」と「在庫合計」の値が一致する商品コードが表示され、一致しない場合はそのままの数値が表示される。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
アクセスでもエクセルでも、一発でやろうと思うと結構厳しいので、 とりあえずアクセスでクエリを二つ使って何とかこなす方法を紹介します。 まず、集計クエリ「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; こんな感じです。 ひとまず、参考までに。
その他の回答 (2)
- nicotinism
- ベストアンサー率70% (1019/1452)
商品コードが3文字限定ですが、 SELECT 商品コード, 在庫, Sum(IIf(Left([在庫],3)=[在庫],[在庫],0)) AS 在庫合計 FROM 在庫テーブル GROUP BY 商品コード, 在庫; とかでも?
補足
ご回答ありがとうございました。 SQL文も実はほとんど触ったことがないので、大変申し訳ないですが、クエリのデザインビューでの方法をご教授いただけないでしょうか? よろしくお願いいたします。 (ただ、今回いただいた内容は、勉強も兼ねて行ってみます。)
- 30246kiku
- ベストアンサー率73% (370/504)
提示されたサンプルでは以下のような結果になりますが、それで良いでしょうか 商品コード 在庫 在庫合計 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」です。) この部分は意味不明です。(サンプルに無いデータが実行結果に出てきています) が、上記クエリでは統合されます。
補足
ご回答ありがとうございました。 SQL文も実はほとんど触ったことがないので、大変申し訳ないですが、クエリのデザインビューでの方法をご教授いただけないでしょうか? よろしくお願いいたします。 (ただ、今回いただいた内容は、勉強も兼ねて行ってみます。)
補足
ご回答ありがとうございます。一点、追加で質問させてください。 「これを利用して、DLookup関数を使ったクエリを作ります。」からの内容なのですが、これは「在庫テーブル」と新しく作った「Q_商品分類」の2つをクエリのデザインビューで表示し、リレーションを設定するということでしょうか? 初歩的な質問かもしれませんが、ご教授ください。 よろしくお願いいたします。