
クエリでわからないことがあります。
添付図のように、商品IDに対する部門IDの個数(または有無)を調べたいと思って、
部門1: DCount("[部門ID]","[T_部門]","[商品ID]=" & [T_商品情報].[商品ID] & "and [部門ID]=1")
部門2: DCount("[部門ID]","[T_部門]","[商品ID]=" & [T_商品情報].[商品ID] & "and [部門ID]=2")
と、[Q_発注管理]のクエリ式に入れてカウントはできたのですが、重くなってしましました。
このような場合、簡単に下記のような結果を得られるような方法はないでしょうか?
※ 今のところ、[Q_発注管理]は、選択クエリです。、
※ [T_商品情報]と[Q_発注管理]のレコード数(6万くらい)は同じになります。
※ 部門1(部門2)は、個数でなく、有無(True,False)でもいいです。

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倍速ですよ。
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースファイル(.db)を開...
-
accsessで顧客コードで氏名を呼...
-
帳票フォームでのあるコンボボ...
-
CSVファイルでテキストの改行の...
-
DocuWorksでの印刷
-
旧filemakerで和暦(令和など)...
-
テキストボックスにコントロー...
-
sqlite(spatialite_gui)での...
-
顧客データベースを作る場合、...
-
汎用カード型のデータベースソ...
-
20万行あるデータを動かしたい
-
はじめてのAccess 2019 について
-
ファイルメーカーへネットワー...
-
警察はスマホに保存した動画や...
-
更新クエリをリンクデータベー...
-
manana というやつで、間違って...
-
データ復旧にかかる時間
-
googleフォームでインストール...
-
最新の日付とその金額をクエリ...
-
エクセルのフィルタ抽出が固まる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで最新のレコード...
-
SQL Server 2000 を使用してい...
-
SQLについて教えてください
-
MySQLでもPHPでも出来る処理は...
-
クエリ式でDcount の代わりは?
-
SELECT INTOで一度に複数の変数...
-
【SQL】他テーブルに含まれる値...
-
フラグをたてるってどういうこ...
-
sqlに記述できない文字
-
truncate tableを使って複数の...
-
オラクルのUPDATEで複数テーブル
-
既存データをINSERT文にして出...
-
副問合せを使わずにUNIONと同様...
-
SQLで、Join句で結合したテ...
-
UPDATEで既存のレコードに文字...
-
PostgreSQLのtimestamp型で時間...
-
既にテーブルが存在する場合の...
-
SQLサーバに対するSQL文で抽出...
-
エラーを起こす方法
-
データベース ユーザの「このユ...
おすすめ情報