AIと戦って、あなたの人生のリスク診断 >>

商品分類項目に野球 テニス サッカー等の項目が15以上あります。
その各項目にウエア シューズ グッズ 構成比率とあります。
テーブルを作成するときに構成比率 ウエア シューズ グッズ 分類IDとフィールドを作成し、項目事に分類IDを振り分けました。

野球販売高を算出するには売上高*野球構成比/100*0.5と計算します。
クエリでこれらを計算するには抽出条件で15項目のファイルを作成する必要がありますよね
さらに計算する1項目につき1ファイル必要ですよね
算出するのは野球販売高だけではなく、テニス販売高、サッカー販売高
と項目事に必要です。

計算項目はこれ以外にも14あり、それらを上記の方法で算出するとファイル数が膨大になります。
Accessではクエリの数が数十個になるのは普通なのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

●質問にはテーブル等の具体例を挙げて質問すること


この質問は説明は長いが、詳細は判りにくい
●テーブル設計について適否の判断を仰ぐこと
 構成比率をテーブルに持つのは適当か。算出項目ではないのか。
●クロス集計クエリで解決できるか(#1のご回答)
●アクセスのピボットテーブルでできないか。(
クロス集計クエリと似ているが。
http://www.relief.jp/itnote/archives/000670.php
バージョン2002から、Accessでもピボットテーブルやピボットグラフが作れるようになりました。
詳細
http://homepage2.nifty.com/MrUr/katuyo/pvtsamp.htm
http://hamachan4.exblog.jp/4469219/
ほか多数
ーー
勝手にデータを作ってみた(実例を挙げてないので回答者に手数をかけることになるのだよ)
IDスポーツフィールド2フィールド3(=売上)
1野球ウエア20
2テニスウエア15
3野球シューズ10
4テニスウエア20
5サッカーウエア30
6テニスウエア5
7テニスシューズ15
8野球ウエア40
9サッカーグッズ25
10テニスグッズ20
11サッカーウエア10
12野球グッズ50
13テニスシューズ15
選択クエリ化する
IDスポーツフィールド2フィールド3
1野球ウエア20
2テニスウエア15
3野球シューズ10
4テニスウエア20
5サッカーウエア30
6テニスウエア5
7テニスシューズ15
8野球ウエア40
9サッカーグッズ25
10テニスグッズ20
11サッカーウエア10
12野球グッズ50
13テニスシューズ15
タイトルバーの右部で、右クリック
ピボットテーブルビュー
列・行にフィールドをD&D
真中のエリアにフィールド3をD&D
合計に加工して(やり方は
http://hamachan4.exblog.jp/4469219/
>集計フィールドを作成する場合は、の部分を参照)
    ウエア グッズ シューズ 総計
サッカー402565
テニス40203090
野球605010120
総計 140 95    40 275
ーー
こんなものと質問事項は大幅に違うのだろうか。質問の意味が良く取れなかった。

この回答への補足

質問内容の意味が分からなかったようですみませんでした。
私自身も今一理解してない部分がありまして困っています。
質問内容に関しては♯1の補足内容に書かせていただきました。

ピボットテーブルを使用すれば作成できそうですね。
回答ありがとうございました。

補足日時:2008/03/07 11:57
    • good
    • 0

クロス集計クエリを作れば良いのでは?


クロス集計クエリで商品分類毎の構成比の一覧を作成
行見出しに商品分類
列見出しに構成する内容
データを構成比率の合計で
商品分類_合計_ウエア_シューズ_グッズ
野球   100  30    20   50 
テニス  100  50    20   30
サッカー 100  30    50   40


と展開させて
商品分類 売上高
野球   100000
テニス  120000
サッカー  80000


のテーブルを使って、新たなクエリで
[売上高]*[ウェア],[売上高]*[シューズ],[売上高]*[グッズ]を計算

この回答への補足

多分質問内容を誤解されているのだと思いますが・・・
私も勘違いしていたことがあります。(15項目のファイルは必要ないかもしれません)

最終的なレポートとしては
野球 テニス サッカー
販売高 販売高 販売高



販売高合計 販売高合計 販売高合計

としたいのですが現状のクエリでは
分類名 販売高
野球


テニス


サッカー


別ファイル
分類 販売高合計
野球
テニス
サッカー
となっております。

(この算出内容にウエア シューズ グッズは関係ありません)
求めるレポート形式をつくりにはクエリを項目事に分割しないと
いけないと思うのですが・・・どうでしょうか?

以下がすべての項目の販売高を算出するクエリです。
・売上高が空白の場合は集計条件からはずしています。
・データレベルという項目が12の場合のみ抽出しています。

SELECT ■商品分類.分類名, ■調査データ2(商品分類).売上構成, ■調査データ2(商品分類).ウエア, ■調査データ2(商品分類).シューズ, ■調査データ2(商品分類).グッズ, ■調査データ(売上げ).前年度売上高, [前年度売上高]*[売上構成]/100+0.5 AS 販売高, ■店マスタ.データレベル
FROM ■店マスタ INNER JOIN (■商品分類 INNER JOIN (■調査データ2(商品分類) INNER JOIN ■調査データ(売上げ) ON ■調査データ2(商品分類).店コード = ■調査データ(売上げ).店コード) ON ■商品分類.分類ID = ■調査データ2(商品分類).分類ID) ON (■店マスタ.店コード = ■調査データ2(商品分類).店コード) AND (■店マスタ.店コード = ■調査データ(売上げ).店コード)
WHERE ((Not (■調査データ(売上げ).前年度売上高) Is Null) AND ((■店マスタ.データレベル)="12"));

販売高合計算出クエリ
SELECT ●販売高(すべて).分類名, Sum(●販売高(すべて).販売高) AS 販売高の合計
FROM ●販売高(すべて)
GROUP BY ●販売高(すべて).分類名;

補足日時:2008/03/07 11:54
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessクエリで分類ごとの累計を計算する方法

テーブルのデータをクエリに読み込んで、大分類ID-小分類IDの組合せを元にして、
月々の累計を計算したいのですが、算出式がどうしてもわかりません。
DSUMを使えばいいかなと思い、クエリのフィールドに、
累計:DSUM("金額","tbl_sample",    )
のような感じでやってみたのですが、条件式をどういれてよいかわかりません。
もし分かる方がいらっしゃればお知恵をお貸しください。よろしくお願いします。

イメージ的には以下のような感じで、★箇所のような累計結果を算出したいです。

------------------------------------------------------------
元のテーブルファイル名:tbl_sample

月 大分類ID 小分類ID 金額 ★累計
4___1___1___\100_\100
4___1___2___\200_\200
4___2___1___\300_\300
4___2___2___\400_\400
5___1___1___\150_\250
5___1___2___\250_\450
5___2___1___\350_\650
5___2___2___\450_\850
--------------------------------------------------------------

テーブルのデータをクエリに読み込んで、大分類ID-小分類IDの組合せを元にして、
月々の累計を計算したいのですが、算出式がどうしてもわかりません。
DSUMを使えばいいかなと思い、クエリのフィールドに、
累計:DSUM("金額","tbl_sample",    )
のような感じでやってみたのですが、条件式をどういれてよいかわかりません。
もし分かる方がいらっしゃればお知恵をお貸しください。よろしくお願いします。

イメージ的には以下のような感じで、★箇所のような累計結果を算出したいです。

-------------------...続きを読む

Aベストアンサー

累計:dsum("金額","tbl_sample","大分類ID=" & 大分類ID & " And 小分類ID=" & 小分類ID & " And 月<=" & 月)
だとどうでしょう。
ここを読んでもらった方が早くて確実。
http://www.moug.net/tech/acvba/0080017.html

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

Qアクセスで大分類・中分類・小分類を作っています。

アクセスで大分類・中分類・小分類を作っています。

コンボボックスを連動させて,作成したのですが?

データー入力後,例えば中分類を変更しても,大分類や小分類がそのままで登録されてしまうのです。

それではダメですよね・・・

その部分がデータとしてあっていればいいのですが,違うければ弾いて欲しいやり方を

ご教示していただきたいのです。。。

ちなみに!

大分類に SELECT DISTINCT 配置署所 FROM ボンベ管理クエリ;

中分類に SELECT DISTINCT 署所記号番号 FROM ボンベ管理クエリ WHERE 配置署所=[大分類];


小分類に SELECT [ボンベID], [容器記号番号] FROM ボンベ管理クエリ WHERE 配置署所=[大分類] AND 署所記号番号=[中分類];


中分類と小分類には,イベントとして

Private Sub 小分類_Enter()
Me.小分類.Requery
End Sub

を書き込んでいます。

  ※ この質問をする場合のカテゴリ選択のようにしたいのです・・・・

ぜひどうかよろしくお願いします。

アクセスで大分類・中分類・小分類を作っています。

コンボボックスを連動させて,作成したのですが?

データー入力後,例えば中分類を変更しても,大分類や小分類がそのままで登録されてしまうのです。

それではダメですよね・・・

その部分がデータとしてあっていればいいのですが,違うければ弾いて欲しいやり方を

ご教示していただきたいのです。。。

ちなみに!

大分類に SELECT DISTINCT 配置署所 FROM ボンベ管理クエリ;

中分類に SELECT DISTINCT 署所記号番号 FROM ボンベ管理クエリ W...続きを読む

Aベストアンサー

そのフォームは単票でしょうか。
帳票なら以下の方法ではできません(コントロールを重ねないと不可能だと思います。)

現状のフォームをコピーし、コピーした方で動作確認してみます。
レコードが更新されても良いようにバックアップは取っておきます。

コピーした方のフォームに記述してあるイベント関係のものをすべて削除し、
以下の記述と置き換えてみます。

Private Function EnterCheck()
  Dim vN As Variant
  Dim i As Long, j As Long

  vN = Array("大分類", "中分類", "小分類")
  For i = LBound(vN) To UBound(vN)
    If (Me.ActiveControl Is Me(vN(i))) Then
      For j = LBound(vN) To i - 1
        If (IsNull(Me(vN(j)))) Then
          Me(vN(j)).SetFocus
          Exit Function
        End If
      Next
      Exit For
    End If
  Next
  With Me.ActiveControl
    .Requery
    .Dropdown
  End With
End Function

Private Function UpdateCheck()
  Dim vN As Variant
  Dim i As Long, j As Long

  vN = Array("大分類", "中分類", "小分類")
  For i = LBound(vN) To UBound(vN)
    If (Me.ActiveControl Is Me(vN(i))) Then
      For j = i + 1 To UBound(vN)
        Me(vN(j)) = Null
      Next
      If (i <> UBound(vN)) Then
        Me(vN(i + 1)).SetFocus
        Exit Function
      End If
      Exit For
    End If
  Next
End Function

Private Sub Form_Load()
  Dim vN As Variant
  Dim i As Long

  vN = Array("大分類", "中分類", "小分類")
  For i = LBound(vN) To UBound(vN)
    With Me(vN(i))
      .ValidationRule = "Is Not Null"
      .OnEnter = "=EnterCheck()"
      .AfterUpdate = "=UpdateCheck()"
    End With
  Next
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
  If (IsNull(Me.小分類)) Then Cancel = True
End Sub


※※ 操作は、必ず "大分類" → "中分類" → "小分類" の順であるとします。

※ Enter 時の動き
どのコンボボックスの Enter でも同じ処理を走ります。
まず、Enter になったのは「誰」を求めます。
求まったら、前操作のコンボボックスが入力されているか確認します。
値が設定されていなければ、そのコンボボックスにフォーカスを移動します。
値が設定されていれば、 Requery 後 Dropdown 表示します。

※ AfterUpdate 時の動き
どのコンボボックスの AfterUpdate でも同じ処理を走ります。
まず、AfterUpdate になったのは「誰」を求めます。
求まったら、後操作のコンボボックス値を Null に変更します。
次のコンボボックスにフォーカスを移動します。

※ フォームのオープン時
各コンボボックスに上記関数を実行する様、イベントに設定していきます。
また、入力規則に念のため Is Not Null を設定しておきます。
既に値が設定されていて、Delキー 等で削除された場合エラーとなるように・・・

※ フォームの更新前処理
コンボボックスは、必ず "大分類" → "中分類" → "小分類" の順と決めたので、
最後の Me.小分類 が Null なら Cancel = True として、更新を拒否します。

※ コンボボックス3つの処理をまとめましたが、個別に記述しても良いと思います。


※※ 検証等は十分に行ってください。また、不具合等あれば修正してください。

そのフォームは単票でしょうか。
帳票なら以下の方法ではできません(コントロールを重ねないと不可能だと思います。)

現状のフォームをコピーし、コピーした方で動作確認してみます。
レコードが更新されても良いようにバックアップは取っておきます。

コピーした方のフォームに記述してあるイベント関係のものをすべて削除し、
以下の記述と置き換えてみます。

Private Function EnterCheck()
  Dim vN As Variant
  Dim i As Long, j As Long

  vN = Array("大分類", "中分類", "小分類")
  For i...続きを読む

QAccessでvlookupみたいなことはできますか。

Accessで、2つのテーブルがあります。

touroku_m テーブル……ID、登録No、氏名、携帯メール
keitai_m テーブル……ID、登録No、携帯メール

keitai_mの方には、携帯メールフィールドに、アドレスが入力されています。
touroku_mテーブルの携帯メールフィールドは空なので、登録Noを比較して、共通だったらkeitai_mに入力してある携帯メールアドレスをtouroku_mに一気に入れたいのです。

こんなことは可能でしょうか。

Aベストアンサー

レス遅くなってすみません。
えっと、追加クエリはテーブル名を見て追加しますので、追加クエリが実行されるときにtouroku_mの名前のテーブルに追加されます。
なので最初touroku_mという名前のテーブルが名前を変えると、それには追加されませんが、またtouroku_mに戻せば追加されるようになりますよ。
要は追加クエリを実行したいテーブルの名前をtouroku_mにしとけば大丈夫です。

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む

QAccessのレポート機能でソート&抽出条件を指定したい

accessでレポート機能について、質問です。
エクセルでいうフィルタ機能みたいなものはあるのでしょうか。

例えば、以下の場合、職位="B"だけレポートで表示したい場合、
どうすればよいのでしょう?
CD 職位 所属
01  A  東京
02  B  東京 → このデータだけを表示
03  A  大阪

1)クエリを作って、レポートで表示するしかないのでしょうか?
2)レポートのデザインで条件指定ができるのでしょうか?

ソートの条件も変えたいのですが、どの項目をソートするかは、
どこで指定できるのでしょうか?

要はレポートの形式は1つで、様々な抽出条件とソート条件で
レポート表示したいのです。

Aベストアンサー

>1)クエリを作って、レポートで表示するしかないのでしょうか?
>2)レポートのデザインで条件指定ができるのでしょうか?
レポートのデザインで、レポートのフィルタプロパティで、職位="B"として、フィルタ適用を"はい"にすると言う方法もあります。

>ソートの条件も変えたいのですが、どの項目をソートするかは、
>どこで指定できるのでしょうか?
レポートのデザインの「並べ替え/グループ化の設定」で行います。

>要はレポートの形式は1つで、様々な抽出条件とソート条件で
>レポート表示したいのです。
1つレポートの雛形を作って、フィルタと並べ替えのプロパティと並べ替え/グループ化の設定を変えて保存し、複数のレポートを用意する。
入力した値によって変えたい場合は、フォーム上のテキストボックスの値や特定テーブルのレコードの値にを参照するクエリを作り、レポートのレコードソースにする。
またはVBAで処理する。

p.s.
レポートの表示をボタンで起動する場合、VBAやマクロを呼び出します。
VBAやマクロでレポートを開く時に、フィルタやWhere条件式を設定できます。

>1)クエリを作って、レポートで表示するしかないのでしょうか?
>2)レポートのデザインで条件指定ができるのでしょうか?
レポートのデザインで、レポートのフィルタプロパティで、職位="B"として、フィルタ適用を"はい"にすると言う方法もあります。

>ソートの条件も変えたいのですが、どの項目をソートするかは、
>どこで指定できるのでしょうか?
レポートのデザインの「並べ替え/グループ化の設定」で行います。

>要はレポートの形式は1つで、様々な抽出条件とソート条件で
>レポート表示した...続きを読む

QACCESS クエリ 抽出条件が多い場合

ACCESSの超初心者です。

選択クエリで、80件ほどの抽出条件を部分一致で
設定しています。(Likeを使用)

例えばこんな感じです。
 フィールド
  aaa1
  bbb52
  aaa33
  aac8
  bba35
  bba115
 
 抽出条件 Like "aaa*" Or Like "bba*"
→抽出結果 aaa1,aaa33,bba35,bba115

今後も条件が増えていく予定なので、別の
良い方法がないかと思っています。
(できるかどうかわかりませんが、
別にテーブルを作り、その一覧内の文字が
含まれるレコードのみを抽出)

皆さんのお知恵をお貸しいただけないでしょうか。

宜しくお願いします。

Aベストアンサー

検索対象の文字列をテーブルで扱うのであれば以下のような感じになるでしょうか。

検索されるテーブル(名前:T1)
 フィールド(名前:FN)
  aaa1
  bbb52
  aaa33
  aac8
  bba35
  bba115

検索する文字列テーブル(名前:TS)
 フィールド(名前:FN)
  aaa
  bba


SELECT T1.FN
FROM T1, TS
WHERE ((T1.FN) Like [TS].[FN] & "*");



検索する文字列テーブルに細工(曖昧方向を追加)
検索する文字列テーブル(名前:TS)
 フィールド(名前:FN)/ 曖昧方向(名前:SP)
  aaa            1
  bba            1

曖昧方向の意味
=1:後方曖昧 (例:aaa*)
=2:前後曖昧 (例:*aaa*)
=3:前方曖昧 (例:*aaa)


SELECT T1.FN
FROM T1, TS
WHERE ((T1.FN) Like Choose([TS].[SP],"","*","*") & [TS].[FN] & Choose([TS].[SP],"*","*",""));

検索対象の文字列をテーブルで扱うのであれば以下のような感じになるでしょうか。

検索されるテーブル(名前:T1)
 フィールド(名前:FN)
  aaa1
  bbb52
  aaa33
  aac8
  bba35
  bba115

検索する文字列テーブル(名前:TS)
 フィールド(名前:FN)
  aaa
  bba


SELECT T1.FN
FROM T1, TS
WHERE ((T1.FN) Like [TS].[FN] & "*");



検索する文字列テーブルに細工(曖昧方向を追加)
検索する文字列テーブル(名前:TS)
 フィールド(名前:FN)/ 曖昧方向(名...続きを読む

QAccessで名前の間のスペースを削除したいのですが

Accessで名前の間のスペースを削除したいのですが

Aベストアンサー

細かい状況が分かりませんがAccessではReplace関数というものが使用できます。
例えば 鈴木 太郎 のようなデータがテーブルの氏名フィールドに入っている場合には、更新クエリーで次のように更新すれば間のスペースを除去できます。
Replace([氏名]," ","")

Replace関数は文字列中のある文字を別の文字に置き換える関数ですが、この例では全角スペースを""(空文字列=文字なし)に置き換えています。

QACCESS クエリ 条件以外のレコードを抽出するには?

クエリで、抽出条件(文字列)以外のレコードを全て抽出したいのですが、うまくいきません。

そのフィールドには空白もあり、
抽出条件を「Not In ("A","B")」とすると、
"A","B"以外の文字列が抽出され、空白のものは抽出されません。

「"A"や"B"でない、他の全てのレコードを抽出したい」という場合、どのようにすればよいのでしょうか?

Aベストアンサー

抽出条件の次の行に(または の行)
Is Null
を加えてください。
または、空白だったらの条件となります

QAccess 別テーブルにある値を抽出条件にしたい

OS:WindowsXP SP3
使用ソフト: Microsoft Access2003


選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか?


ホームページに来て頂いた方の検索キーワードを集計しております。
テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件)
テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件)


クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、
抽出条件をどのように指定したらいいのか分かりません。

そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。
SQLを用いる方法でも構いませんので教えてください。

Aベストアンサー

SELECT * FROM テーブル1
WHERE NOT EXISTS
(SELECT * FROM テーブル2 WHERE テーブル1.検索キーワード履歴 = テーブル2.除外キーワード候補)
OR 検索キーワード履歴 IS NOT NULL
とか
SELECT * FROM テーブル1
WHERE 検索キーワード履歴 NOT IN (SELECT 除外キーワード候補 FROM テーブル2 )
ということ?
1フィールドに1キーワードの場合です。


人気Q&Aランキング