- ベストアンサー
Accessのクエリについて
ふたつのテーブルから抽出したユーザー名が重複してしまいました。それを一つだけに絞ってユーザーの件数の合計を出したいのですが、方法はありますか? 私がとった方法はクエリプロパティのレコードを「はい」にしましたがうまくいきませんでした。 それでピボットテーブルで集計をしましたが、やはりテーブルデータシートで確認できたら便利に思います。 どなたかお知恵をお貸しください。 よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Accessにはこれを一度に処理する機能はありません 重複をなくしたものを作ってからカウントしてやることになります
その他の回答 (3)
? DBLookup("select count(nm) as cnt from (select 顧客名 as nm from Table1 union select 顧客名 from Table2)") 3 よって、先の回答はキャンセル!
お礼
重複クエリを使って解決してみたのですが、Husky2007さんがアドバイスくださった方法でも試みてみたいと思います。 ありがとうございました。
- kurodai2
- ベストアンサー率38% (77/202)
ユーザー名・・同姓同名があれば 名前は不味い気がしますが Table1 井上 達也 中野 浩二 斉藤 隆 Table2 井上 達也 斉藤 隆 山田 太郎 求める件数 = 4 select count(nm) as cnt from (select name as nm from Table1 union select name from Table2)
<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
お礼
この方法でやって解決できました。 ありがとうございました。