みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Get(レコード番号)で順番になるようにしていますが、
同じ顧客IDなら1-A、1-Bとなるようにしたいです。
*例
レコード番号
1-A
1-B
2
3-A
3-B
3-C
尚、重複しない場合はアルファベットをつけないようにしたいです。
この計算式までたどり着いたのですが、うまくいきません。
If ( not IsEmpty ( Self ) ;
Let ( [
#customerID = 顧客ID ;
#recordNumber = Get ( レコード番号 ) ;
#duplicateCount = Count ( FilterValues ( List ( 顧客ID ) ; #customerID ) ) ;
#duplicateSuffix = If ( #duplicateCount > 1 ; "-" & Char ( 64 + Mod ( #recordNumber - 1 ; #duplicateCount ) + 1 ) ; "" )
] ;
#recordNumber & #duplicateSuffix )
)
レコード番号は、1.2.3 と振られていきますので、それを書き換えても、1-A, 1-B の次は 3 になりますよ。
Offline
つまり、この場合レコード番号は全く関係なくて、グループ番号とでもいうべき顧客IDの番号が必要ですよね。
上から順に計算しても得られないので、自己リレーションかSQLか集計フィールド(リスト)を使うでしょう。
と思ったけど、GetNthRecordを使えば上から順でも可能か...
バージョンによりますね。
顧客IDで自己リレーションをはり、レコード番号でソートしておきます。
Let (
[
slst = ¶ & List ( テーブル 2::レコード番号 ) & ¶ ;
suf = ValueCount ( Left ( slst ; Position ( slst ; ¶ & レコード番号 & ¶ ; 1 ; 1 ) ) )
] ;
Case (
ValueCount ( slst ) = 2 ; 顧客ID ;
顧客ID & "-" & Char ( Code ( "A" ) - 1 + suf )
)
)https://www.dropbox.com/scl/fi/dci0bwx1 … qcp0x&dl=0
Last edited by Shin (2023-10-24 16:01:45)
Offline
表題
> IDが複数ある場合、レコード番号にアルファベットを追加したい
この
レコード番号に
は
レコード番号順に
の間違いですよね。
もし、それがレコード作成順ということなら、
レコードID順が正しいですね。
これらが正しいのなら、
レコードIDフィールドを作り、
自己リレーション
顧客ID = 顧客ID
and
レコードID > レコードID
として、
顧客ID & Case ( IsValid ( ::顧客ID ) ; "ー" & Char ( Code ( "A" ) - 1 + Count ( ::顧客ID ) ) )
でいいのでは。
これは、
顧客IDフィールドを書き換えてはリレーションが成立しなくなるので、
新たな計算フィールドとしたほうがいいでしょう。
Offline
チポさん、その構造ですと
1
1-A
2
3
3-A
3-B
になってしまいます。
> 重複しない場合はアルファベットをつけないようにしたい
この条件ですと、リレーションを2本張るか、上の式にするか、になってしまいそうですが。
Offline
ああ、読み違えていました!!
私の考え方だと、
自身の後ろの関連レコード有無の判定が必要になり、
確かにもう一つリレーションが必要になりますね。
Offline
レコード番号というのはソートした後でつくものなので、「レコード番号でソート」というのはちょっと違和感が。。。
検索して顧客ID(と何か日付とか年度・月度とか?)でソートしたあとのレコードに番号とアルファベットを付けたいんでしょうから、
リレーションを使うのならそこの条件を明示してもらわないとリレーション条件が決まりません。
(検索条件をリレーションに反映させる必要がある)
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 563 KiB (Peak: 582.08 KiB) ]