Microsoft Access 掲示板

データの順番をカスタム

8 コメント
views
4 フォロー

クエリ内で文字列&文字列で作成した分で並べ替えが上手く出来なくて困っています。
メインテーブルにはオートナンバーのメインIDと日付や他のフィールドがありサブテーブルにはオートナンバーのサブIDと項目や他のフィールドとメインIDがあります。各メインIDをリレーションして入力フォームを作成してデータをためています。
そのデータをクエリで累計をだしたいので順番を自作しました。日付を 日付変換:Format([日付],"yyyymmdd") としてサブIDを サブID変換:Format([サブID],"00000") としてそれを カスタム順番: [日付変換] & [サブID変換]としました。
例えば2023/4/1でサブIDが1の場合⇒2023040100001となります。これはフォームに入力するのが日付通りとは限らずランダムになるから、そうしました。ここまでは良かったのですがクエリ内でカスタム順番が昇順の並べ替えができず実行すると[日付変換]と[サブID変換]のパラメータが出てきてます。それを無視して実行しても並べ替えの順番が希望通りになってないところもあります。これが解決できなくて・・・アドバイスを頂きたいです。よろしくお願いします。 

こうた
作成: 2023/10/16 (月) 16:02:11
通報 ...
1

日付、サブID の昇順で並べ替えをしたいということでしょうか。
ならば、フィールドを結合する必要はなく、それぞれのフィールドで並べ替えを設定すればいいでしょう。
デザインビューのグリッドで左側のあるフィールドが優先されますので、下記のように設定すればご希望の並び順になります。

フィールド・・・日付サブID
テーブル・・・メインテーブルサブテーブル
並べ替え・・・昇順昇順
表示
2
こうた 2023/10/16 (月) 17:38:17 2952d@71e4c

hatenaさん ありがとうございます。その場合、累計の式はどうすればいいでしょうか?
累計: DSum("項目の金額等","テーブル名","日付 <= #" & [日付] & "#")や日付のところをサブIDにしても、日付+IDの順番での累計がでないので、、、それで結合をしたのです。何で設定すれば分からなくて。

3

2つのテーブルを結合したクエリを元にクエリを作成し、下記のような感じの式になります。

累計: DSum("項目の金額等","クエリ名","日付 <= #" & [日付] & "# OR (日付=#" & [日付] & "# AND サブID<=" & [サブID] & ")")

2つのフィールドを&で結合してそれを対象にするとインデックスが無効になるので重い処理になります。DSumはただでさえ重いので、演算フィールドを対象にするのはお勧めできません。
上記の式にようにすればインデックスが有効になるので、データ数が多くなっても重くなりづらいです。

ただ、それでも重い処理になりがちなので、なんとかしたいと思われたなら、下記のページを参考にしてください。

累計値をテーブルに自動入力する関数 - hatena chips

4
こうた 2023/10/17 (火) 08:32:18 ddfe5@c9913

hatenaさん ありがとうございました。すごいアイデアです。因みにクエリ内での累計をせずにフォームやレポートにだけ累計の場合はどうなりますでしょうか?(日付、サブIDの並べ替え設定したクエリを基に作成)

5
こうた 2023/10/17 (火) 09:04:54 ddfe5@c9913

hatenaさん すみません、取りあえず DSum("項目の金額等","クエリ名","日付 <= #" & [日付] & "# OR (日付=#" & [日付] & "# AND サブID<=" & [サブID] & ")")をクエリに記述して試したところエラーにはなりませんが累計の値がところどころ計算されずにすぐ上のレコードと同じ値がでます。並べ替えも設定し出来ていているのですが・・・何かが間違っているのでしょうか?

6
こうた 2023/10/17 (火) 09:11:01 ddfe5@c9913

hatenaさん 何度もすみません、ふと思ったのですがDSum式にメインIDも記述必要でしょうか? 日付等が格納されていますメインテーブルには同じ日付のものも多数あるので(メインID:1 日付:4/1、メインID:2 日付:4/1の場合もあり)。だから今のDSum式では同じ値の累計がでてるのでしょうか?

7

どのような累計が欲しいのでしょうか。
最初の質問では、日付とサブIDで並べ替える。
次に、その並び順で累計を出したい。

サブIDはオートナンバー型ということなので重複はないですよね。ならば、同じ値はでないと思いますが。

もう少し正確な情報を出してください。
実際のテーブル名とフィールド構成(フィールド名、データ型、主キー設定)
どのような累計が欲しいのか。

8
こうた 2023/10/17 (火) 14:25:03 ddfe5@c9913

hatenaさん すみませんでした。結果的に日付・サブID 並べ替え設定して 日付&サブIDを結合したカスタム順番(例:2023040100005)のフィールドを使い DSum("金額","クエリ名","カスタム順番<=" & [カスタム順番]) にしたらレコード毎にきちんと累計がだせました。
色々している内に混乱し、お手数かけてしまいました。
ここまでは出来ましたのでいずれデータが大量になる事を想定して、自動入力する関数にトライしたいと思ってます。
ありがとうございました。