プロが教えるわが家の防犯対策術!

ふたつのテーブルから抽出したユーザー名が重複してしまいました。それを一つだけに絞ってユーザーの件数の合計を出したいのですが、方法はありますか?
私がとった方法はクエリプロパティのレコードを「はい」にしましたがうまくいきませんでした。
それでピボットテーブルで集計をしましたが、やはりテーブルデータシートで確認できたら便利に思います。
どなたかお知恵をお貸しください。
よろしくお願いいたします。

A 回答 (4件)

? DBLookup("select count(nm) as cnt from (select 顧客名 as nm from Table1 union select 顧客名 from Table2)")


3
よって、先の回答はキャンセル!
    • good
    • 0
この回答へのお礼

重複クエリを使って解決してみたのですが、Husky2007さんがアドバイスくださった方法でも試みてみたいと思います。
ありがとうございました。

お礼日時:2007/08/07 23:34

ユーザー名・・同姓同名があれば 名前は不味い気がしますが



Table1
井上 達也
中野 浩二
斉藤 隆

Table2
井上 達也
斉藤 隆
山田 太郎

求める件数 = 4


select count(nm) as cnt from
(select name as nm from Table1
union
select name from Table2)
    • good
    • 0

<Table1>


ID___顧客名
1____鈴木 一郎
2____山田 太郎

<Table2>
ID___顧客名
1____村上 信次
2____鈴木 一郎
3____鈴木 一郎

<クエリ1>
ユニークな顧客数
3

まあ、色々と工夫すればクエリも作れないことはないです。

[イミディエイト]
? DBLookup("SELECT COUNT(非重複顧客名) FROM(SELECT DISTINCT 顧客名 AS 非重複顧客名 FROM Table1)")
2
? DBLookup("SELECT COUNT(非重複顧客名) FROM(SELECT DISTINCT 顧客名 AS 非重複顧客名 FROM Table2)")
2
? DBLookup("SELECT COUNT(テーブル間重複顧客名) FROM(SELECT DISTINCT Table1.顧客名 AS テーブル間重複顧客名 FROM Table1, Table2 WHERE Table1.顧客名=Table2.顧客名)")
1
? DBLookup("SELECT COUNT(テーブル間重複顧客名) FROM(SELECT DISTINCT Table2.顧客名 AS テーブル間重複顧客名 FROM Table1, Table2 WHERE Table2.顧客名=Table1.顧客名)")
1

重要なことは、2+2-(1+1)ではなく、2+2-1ということです。
2+2-(1+1)/2かなとも思いましたが、多分、2+2-1でいいです。
そういうことで、クエリは次のようになります。

SELECT DBLookup("SELECT COUNT(非重複顧客名) FROM(SELECT DISTINCT 顧客名 AS 非重複顧客名 FROM Table1)")+DBLookup("SELECT COUNT(非重複顧客名) FROM(SELECT DISTINCT 顧客名 AS 非重複顧客名 FROM Table2)")-DBLookup("SELECT COUNT(テーブル間重複顧客名) FROM(SELECT DISTINCT Table1.顧客名 AS テーブル間重複顧客名 FROM Table1, Table2 WHERE Table1.顧客名=Table2.顧客名)") AS ユニークな顧客数;

ここでは、自作関数 DBLookupを利用しています。
が、一応、クエリには違いありません。

Public Function DBLookup(ByVal strQuerySQL As String) 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 = DataValue
   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
    • good
    • 0

Accessにはこれを一度に処理する機能はありません


重複をなくしたものを作ってからカウントしてやることになります
    • good
    • 0
この回答へのお礼

この方法でやって解決できました。
ありがとうございました。

お礼日時:2007/08/07 23:30

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

関連するカテゴリからQ&Aを探す