みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
各レコードに数字をあて、特定の条件に合うレコード数のカウントの方法についてご指南下さい。
例を当てますと…
各生徒のテストデータを作りたいとします。
各レコードにそれぞれの生徒を入れるのですが、
「平均点」フィールドに点数のデータを、
フッタパートに
「カウント_0」フィールド = 0点の生徒のレコード数
「カウント_10」フィールド = 1〜10点の生徒のレコード数
「カウント_20」フィールド = 11〜20点の生徒のレコード数
…
「カウント_100」フィールド = 100点の生徒のレコード数
としたいのです。
例→
レコード数が5つあり、各生徒の平均点が(「平均点」フィールドに入力する数値)
82 13 0 98.7 19.2 の場合、
カウント_0フィールドが「1」 ←該当データが1つあるため
カウント_10フィールドが「2」←該当データが2つあるため(13と19.2)
カウント_80フィールドが「1」←該当データ 82
カウント_90フィールドが「1」←該当データ 98.7
それ以外のカウントフィールドは該当データがないため「0」と表記
というシステムにしたいのです。
初心者で至らない箇所もありますが、
ご助力下さいますと幸いです。
書かれた例は整合性が取れていませんよ。
> 「カウント_10」フィールド = 1〜10点の生徒のレコード数
> カウント_10フィールドが「2」←該当データが2つあるため(13と19.2)
計算フィールド・繰り返し を作り、
各繰り返し位置にカウントを割当て、
点数からカウントに対応する繰り返し位置のみに1を、他は空白か0を入力。
それを集計フィールドで繰り返し位置個々の集計を取ればいいでしょう。
Offline
チポさんへ
説明をもっと明確化するべきでさしたね。申し訳ありません。
「カウント_○○」フィールドは入力せず、反映させるだけのことです。
つまり、対象レコードがいくつあるかをしりたい、それだけのことです。
新規レコードをさらに追加して「平均点」フィールドに例えば15を入力したとすると、
さっきの例に例えると
カウント_10フィールドが「3」に変化する ←該当データが3つあるため(13と19.2に15が追加されるため)
平均点フィールドに入力した数値の量によって
どのカウントにいくつのレコードがあるかの数を知る、と言う目的です。
補足ですが、先ほどの例だと小数点を含んでいるのがあったので、正確には
「カウント_10」フィールド = 1〜10点の生徒のレコード数 ではなく
「カウント_10」フィールド = 1.01〜10点の生徒のレコード数
他にも…
「カウント_20」フィールド = 10.01〜20点の生徒のレコード数
などとするべきでしたね。
なので
> 「カウント_10」フィールド = 1〜10点の生徒のレコード数
> カウント_10フィールドが「2」←該当データが2つあるため(13と19.2)
ではなく
> 「カウント_10」フィールド = 1〜10点の生徒のレコード数
> カウント_20フィールドが「2」←該当データが2つあるため(13と19.2)
の訂正でございます。
とすると、
カウント_90
は80.01〜90点となり、
> 「カウント_100」フィールド = 100点の生徒のレコード数
これでは90点台はどうします?
また、
0.01~1とか、ほかにも整合できていないところがありますよ
> 「カウント_○○」フィールドは入力せず、反映させるだけのことです
そう考えての回答でしたよ。。
Offline
0と100は固定です。0と100を含む0.01から99.99までの数値を対象に各カウントフィールドでの該当レコード数の表示をする、ということです。
便宜上平均点フィールドを入れていますが、紛らわしければ以下の説明で「点」を省きます。
カウント_0フィールド→0のみ
カウント_10フィールド→0.01から10の範囲
カウント_20フィールド→10.01から20の範囲
カウント_30フィールド→20.01から30の範囲
カウント_40フィールド→30.01から40の範囲
カウント_50フィールド→40.01から50の範囲
カウント_60フィールド→50.01から60の範囲
カウント_70フィールド→60.01から70の範囲
カウント_80フィールド→70.01から80の範囲
カウント_90フィールド→80.01から90の範囲
カウント_99フィールド→90.01から99.99の範囲
カウント_100フィールド→100のみ
こうします。
ちなみに0未満・100.01以上は対象外です。
その12個のフィールドを繰り返しフィールドにすることにして、
Get ( 計算式繰り返し位置番号 ) - 1 = Ceiling ( 平均点[1] / 10 ) + Div ( 平均点[1] ; 100 )
という繰り返しの計算フィールドを作ります。それを個別に合計する集計フィールドを作るといいでしょう。
https://www.dropbox.com/s/ks7p7zhwtt4hu … 2.zip?dl=0
Last edited by Shin (2021-11-19 09:02:12)
Offline
生徒別の集計結果を繰り返し[12回]SQL計算フィールドに一発取得する案です。
その計算式に以下のSQL関数式を設定します。(他に必要な設定は一切ありません)
ExecuteSQL(
"
SELECT COUNT(*)
FROM ""このテーブル名""
WHERE ""生徒""=? AND ""平均点"">? AND ""平均点""<=?
"
; ""
; ""
; 生徒[1] & Left(平均点[1]; 0)
; Case(
Get(計算式繰り返し位置番号)=1; -.01;
Get(計算式繰り返し位置番号)=12; 99.99;
(Get(計算式繰り返し位置番号)-2)*10
)
; Case(
Get(計算式繰り返し位置番号)=11; 99.99;
Get(計算式繰り返し位置番号)=12; 100;
(Get(計算式繰り返し位置番号)-1)*10
)
)
Offline
検索結果を集計したい場合は、SQLのWHERE条件を追加する必要がありますね。
質問の文章が「各生徒の」となってるけど、実際は単純に各レコードに既に存在する「平均点」という値を区分集計するだけ
(各生徒の平均点が(「平均点」フィールドに入力する数値)
82 13 0 98.7 19.2 の場合)
で、そこに「生徒別」という観点はない(基本的に1レコード1生徒)のでは?
Shinさんのやり方で、無事行いたいことが実現出来ました。(12個のフィールドを繰り返しフィールドにするやり方)
今まで各フィールドを別々に作っていましたが、繰り返しフィールドの方がわかりやすいんですね。
他の方のメッセージも参考にしつつ、これをもちまして解決と致します。
ありがとうございました。
Pages: 1
[ Generated in 0.008 seconds, 10 queries executed - Memory usage: 526.56 KiB (Peak: 547.47 KiB) ]