• ベストアンサー

Accessで、一項目の値ごとにカウントしたい

Accessのテーブルの項目に、AとBとCという項目が設定されています。 Aが何件、Bが何件、Cが何件 というレポートを作りたいのですが、クエリでやってみると、 同一項目を3つにそれぞれの条件でカウントしようと記述しても、 AND条件になって、できませんでした。 条件式を考えれば当たり前なのですが・・・。 これをシンプルな方法で実現するにはどうすればよいでしょうか? アドバイスお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.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

groovyreality
質問者

お礼

細かいコードまでアドバイスいただき ありがとうございました。

その他の回答 (1)

回答No.1

サブクエリでできるはずです。 これが正しいやり方かどうかはわからないのですが・・・ 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条件を変えてください。

groovyreality
質問者

お礼

ありがとうございます。 いろいろ試してみます。