みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
こんにちは。sato9870と申します。
タイトルが分かりづらかったら大変すみません。
実現したい事は以下の通りです。
テーブルAに
--------------------------
ID 名称 部署ID タイプ
001 人名1 007 人
002 人名2 007 人
003 人名3 007 人
004 人名4 008 人
005 人名5 008 人
006 人名6 008 人
007 部署1 007 部署
008 部署2 008 部署
--------------------------
のようなデータがあるのですが、このテーブルに新規カラム「部署メンバー」を追加して
ID 名称 部署メンバー
007 部署1 001|002|003|
008 部署2 004|005|006|
のような形式でcsvに出力するにはどうしたら良いかご教示頂けないでしょうか?
IDと部署IDをリレーションさせれば
部署のレコードと人名が1対多で紐付くのは分かるのですが、
それを上記の形式で表示させる方法が分からず困っております。
また、DBは業務用として本番運用中な為、
データの持ち方を変更するのは難しいです。
出来るとしたら、部署データだけ別テーブルに移動させる事くらいでしょうか・・・。
環境はWindows10Pro、FilemakerPro11Advancedです。
説明が不足しておりましたら追記させて頂きます。
すみませんが、よろしくお願いいたします。
(追記)
・1つの部署に紐付く人数は、一定ではなく部署によって異なります。
部署IDで自己リレーション、
Let (
[
lst = List ( リレーション::ID ) ;
lst = FilterValues ( lst ; Substitute ( ¶ & lst & ¶ ; ¶ & ID & ¶ ; “¶//” & ID & ¶ ) )
] ;
Substitute ( lst ; ¶ ; “|” )
)
または、
Substitute (
Char(2) & List ( リレーション::ID ) & ¶ ;
[ ¶ ; Char(1) & Char(2) ];
[ Char(2) & ID & Char(1) ; “” ];
[ Char(1) & Char(2) ; “|” ];
[ Char(1) ; “” ];
[ Char(2) ; “” ]
)
の計算フィールドを作り、書き出せばいいでしょう。
編集者 Shin (2023-05-17 10:43:41)
オフライン
Shin様
ご教示ありがとうございます。
頂いた2種類の方法を試させて頂いた所
それぞれ下記のエラーが表示されてしまいました。
■方法1
部署IDで自己リレーション、
Let (
[
lst = List ( リレーション::部署ID ) ;
lst = FilterValues ( lst ; Substitute ( ¶ & lst & ¶ ; ¶ & 部署ID @ ¶ ; “¶//” & 部署ID & ¶ ) )
] ;
Substitute ( lst ; ¶ ; “|” )
)
【実行結果】
→4行目の「部署ID @ 」に対して「指定されたフィールドが見つかりません」と表示される。
「@」を削除すれば式自体は正しいと認識されるが、思った通りの計算結果が得られない(空欄になる)
■方法その2
Substitute (
Char(2) & List ( リレーション::部署ID ) & Char(1) ;
[.¶ ; Char(1) & Char(2) ];
[ Char(2) & 部署ID & Char(1) ; “” ];
[ Char(1) & Char(2) ; “|” ];
[ Char(1) ; “” ];
[ Char(2) ; “” ]
)
【実行結果】
→3行目の「.¶」に対して「この式は、計算出来ませんでした」と表示される。
「.」を削除すれば式自体は正しいと認識されるが、思った通りの計算結果が得られない(空欄になる)
-
方法1の「@」と方法2の「.」の意味と解決方法を教えて頂けないでしょうか。
度々すみませんが、よろしくお願いいたします。
チポ様
ありがとうございます!おかげさまで無事解決いたしました!
×カラム→〇フィールドについてもありがとうございます。助かりました。
また、追加のご質問となり恐縮なのですが、
下記にフィールド「無効」を追加して
同フィールドが「1」のレコードを除外する方法はあるのでしょうか?
例.
テーブルA
--------------------------
ID 名称 部署ID タイプ 無効
001 人名1 005 人
002 人名2 005 人
003 人名3 005 人 1
004 人名3 005 人 1
005 部署1 005 部署
の場合、005のレコードの計算式の結果が
001|002|003|004
ではなく
001|002
になるようにしたい、という次第で御座います。
ポータルで表示させる場合であれば「ポータルのレコードのフィルタ」などで絞り込みを掛けられますが
頂いた計算式を修正する事でこのような絞り込みをする事は出来るのでしょうか?
何度もすみませんがご教示を頂けますと幸いです。
よろしくお願いいたいます。
「有効名称」とかの計算フィールド
Case ( 無効 <> 1 ; 名称 )
を作って、それを連結すればいいのでは。
「有効ID」の方がリレーション時点で除外されるから、ベターかな。
その計算式で部署も無効扱いすれば、リレーションが簡単になりますね。
Shin様、himadanee様、チポ様
おかげさまで、教えて頂いた方法で無事解決いたしました!
同じ問題に対しても色々な解決方法があるのだと大変参考になりました。
ありがとうございました!