- ベストアンサー
Accessで、一項目の値ごとにカウントしたい
Accessのテーブルの項目に、AとBとCという項目が設定されています。 Aが何件、Bが何件、Cが何件 というレポートを作りたいのですが、クエリでやってみると、 同一項目を3つにそれぞれの条件でカウントしようと記述しても、 AND条件になって、できませんでした。 条件式を考えれば当たり前なのですが・・・。 これをシンプルな方法で実現するにはどうすればよいでしょうか? アドバイスお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
<tab1> ID___fld_1 01__A 02__A 03__B 04__B 05__C <クエリ1> Count_A__Count_B__Count_C _________2___________2___________1 SELECT DBCount("*","tab1","fld_1='A'") AS Count_A, DBCount("*","tab1","fld_1='B'") AS Count_B, DBCount("*","tab1","fld_1='C'") AS Count_C; まあ、シンプルと言えばシンプルです。 留意事項は、戻り値がVariantだということです。 Public Function DBCount(ByVal strField As String, _ ByVal strTable As String, _ Optional ByVal strWhere As String = "", _ Optional ByVal ReturnValue = 0) As Variant On Error GoTo Err_DBCount Dim N Dim strQuerySQL As String Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset strQuerySQL = "SELECT COUNT(" & strField & ") FROM " & strTable If Len(strWhere) > 0 Then strQuerySQL = strQuerySQL & " WHERE " & strWhere End If With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then .MoveFirst N = .Fields(0) End If End With Exit_DBCount: On Error Resume Next rst.Close Set rst = Nothing DBCount = IIf(N <> 0, N, ReturnValue) Exit Function Err_DBCount: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBCount)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBCount End Function
その他の回答 (1)
- fumufumu_2006
- ベストアンサー率66% (163/245)
サブクエリでできるはずです。 これが正しいやり方かどうかはわからないのですが・・・ nullじゃない件数を出す場合 SELECT Count([A]) AS Aの件数,(SELECT Count([B]) FROM テーブル1) as Bの件数 ,(SELECT Count([C]) FROM テーブル1) as Cの件数 FROM テーブル1; 数値で0じゃない件数を出す場合 SELECT Count([A]) AS Aの件数,(SELECT count([B]) FROM テーブル1 where [B]>0) AS Bの件数,(SELECT count([C]) FROM テーブル1 where [C]>0) AS Cの件数 FROM テーブル1 WHERE A>0 これは、Aの件数を表示する SELECT Count([A]) AS Aの件数 FROM テーブル1 に、 SELECT count([B]) FROM テーブル1 SELECT count([C]) FROM テーブル1 も一緒に表示させたみたいなのです。 必要に応じてwhere条件を変えてください。
お礼
ありがとうございます。 いろいろ試してみます。
お礼
細かいコードまでアドバイスいただき ありがとうございました。