• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:クエリ式でDcount の代わりは?)

クエリ式でDcount の代わりは?

このQ&Aのポイント
  • クエリでわからないことがあります。
  • 部門IDの個数を調べたいと思っていますが、Dcount関数を使用していると処理が重くなってしまいます。
  • 簡単に部門IDの個数や有無を調べる方法はないでしょうか?

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

  • ベストアンサー
回答No.1

Q、簡単に下記のような結果を得られるような方法はないでしょうか? A、3倍速程度ならばDCount関数を自作。  DLookup()やDCount()は、少々重たいですね。それらと比較しての実行時間を30%程度まだ短縮するには自作という手があります。 Public Function DBCount(ByVal strField AS String, _             ByVal strTable As String, _             Optional ByVal strWhere AS String = "") 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 = Nz(.Fields(0), 0)     End If   End With Exit_DBCount: On Error Resume Next   rst.Close   Set rst = Nothing   DBCount = N   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 <テーブル構造を見直すべきでは???>  普通は顧客区分とか商品の科目、品種に関する識別キーはそれぞれのマスターに記憶。そして、それをどのように表現するのかは「区分呼称管理テーブル」の役割り。このような設計であれば、そもそもDCount()、DBCount()の出番はないかと・・・。それが、10倍速への道。なお、SQL Server+Accessプロジェクトならば50倍速ですよ。

その他の回答 (1)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

SELECT T_部門.商品ID, -Int(Sum([部門ID]=1)) AS 部門1, -Int(Sum([部門ID]=2)) AS 部門2 FROM T_部門 GROUP BY T_部門.商品ID; とか TRANSFORM cint(Nz(Count(QX.[数]),0)) AS 数のカウント SELECT QX.商品ID FROM ( SELECT [T_部門].商品ID, [T_部門].部門ID, Count([T_部門].部門ID) AS 数 FROM T_部門 GROUP BY [T_部門].商品ID, [T_部門].部門ID ) AS QX GROUP BY QX.商品ID PIVOT '部門' & QX.部門ID; だと? もし上記で結果が得られたなら後学のため大体の処理時間を教えてくださいませ。

関連するQ&A