クエリでわからないことがあります。
添付図のように、商品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で質問しましょう!
似たような質問が見つかりました
- その他(データベース) accessについて 2 2022/05/31 16:58
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- SQL Server SQLのクエリの書き方 1 2022/03/29 23:06
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
- Excel(エクセル) 【条件付き書式】countifsで複数条件を満たしたセルを赤くする方法 2 2023/02/09 23:53
- 就職 商品の発送・梱包業務、在庫管理等のネット通販部門スタッフ、EC担当スタッフのお仕事はどの業界に属して 2 2023/07/10 17:40
- USTREAM weblioの余計な宣伝を消したいです。 2 2022/11/12 19:42
- Amazon AmazonでSSDを返品しました。返品しても購入履歴のところは返品完了にならないのですか?? 3 2023/01/05 17:38
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
警察はスマホに保存した動画や...
-
データベースファイル(.db)を開...
-
シャープレジスター エラーコード
-
Notion@リレーション値の取得...
-
180g重量版レコードとは? 180...
-
Microsoft Accessについて
-
シートが異なるセル同士を、相...
-
googleフォームでインストール...
-
accsess2000です。レポートのヘ...
-
ドライブレコーダー側のGPSの使用
-
コンピュータ用語、データベー...
-
汎用カード型のデータベースソ...
-
Accessのリンクテーブルについて
-
Accessフォームからパラメータ...
-
フォーム(形、形式)、スタイル(...
-
構文エラー:演算子がありませ...
-
sqlite(spatialite_gui)での...
-
CGIメールフォームについて
-
エクセル
-
コンピュータ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECTした結果をSELECTしたい!
-
Accessで最新のレコード...
-
SQL Server 2000 を使用してい...
-
クエリ式でDcount の代わりは?
-
年、月、日を取得する関数
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
フラグをたてるってどういうこ...
-
スキーマ
-
sqlに記述できない文字
-
オラクルのUPDATEで複数テーブル
-
Accessで今日から5日後
-
timestampのデータはどのように...
-
UPDATEで既存のレコードに文字...
-
pandasでsqlite3にテーブル作成...
-
テーブル名が可変の場合のクエ...
-
PostgreSQLのtimestamp型で時間...
-
truncate tableを使って複数の...
-
IDとパスワードについて。
-
エラーを起こす方法
おすすめ情報