みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FM12 WIN7 使用しています。
名 日 項目1 項目2 項目3
A 13 ●
A 13 □
A 14 ●
B 13 ●
B 14 ●
B 14 □
C 13 ●
C 13 ▲
これらのレコードを同一名、同一日付で各項目を下記のように一つのレコードにまとめるには、どのような方法があるのでしょうか?
名 日 項目1 項目2 項目3
A 13 ● □
A 14 ●
B 13 ●
B 14 ● □
C 13 ● ▲
すいませんが、お助け下さいm(_ _)m
Offline
別テーブルから名&日を常時ユニークにしてインポートし
名と日でリレーションしてポータル表示?
travelerさんのテーブルでレコードを作ったら、
もう一回、名&日の照合でインポート。
でもいいのでは。
Offline
勘違いしてた。
照合インポートもダメですよね。
名と日をインポート後、名と日でリレーションしてList(元テーブル::項目1)の
計算フィールドかインポート時の自動入力かな。
「名と日」自己リレーションの集計結果を用意して、それを「名と日」ユニークレコード見せする。
ユニーク見せは、自己テーブルでポータルか間連レコード移動にするか、別テーブルにインポートするかはお好みで。
ただ、別テーブルにすると、データ更新の同期問題が発生します。
Offline
Hiroさん
理解出来たのは最終行だけですぅ。
もうちょっと噛み砕いて下さい。申し訳ない。
サンプルをアップしましたので、説明代わりにご覧下さい。
レコード結合結果は繰り返し[3]フィールドへ格納するようにして、
ユニークレコード摘出は値一覧の一意化(2番目値でソート丸め)機能を利用しています。
結果表示は以下の3種類の方法を例示しています。
・自テーブルのポータルで関連レコードのリスト表示。
・自テーブルの検索で実体レコードの一覧表示。
・別テーブルへ結果レコードだけインポート。
●サンプル「レコード結合集計.fp7」→ http://yahoo.jp/box/AmvZ1x
(あえて汎用性ある.fp7にしてあります。.fmp12は変換してご覧下さい)
Offline
ありがとうございます。
パッと見、難しい。あとでじっくり見させていただきます。
各項目の最小値とか最大値の集計フィールドを作って、名と日の小計パートで表示、じゃだめなのかな。
ああ、、
> もう一回、名&日の照合でインポート
これではダメですね。
間違えました申し訳ありません。
両テーブルの
名&日
でリレーションして、
項目のMaxを取ったらどうでしょう。
Offline
Maxなど統計関数や集計フィールドは、文字列(有効な数値以外の)には無効で使えません。
そこでサンプルでは、
GetValue(List(名日リレーション::項目); 1)
としています。
Offline
あれ?
私の「各項目の最小値とか最大値の集計フィールドを作って」は、項目が数字でないと集計フィールドが作れません(指定不可)けど、
チポさんの「でリレーションして、項目のMax」は、できるはずなんだけど。
やってみたら、なぜかMax(table::field)は結果が出ません。Max(f1;f2;f3)はテキストでもちゃんと計算します。
統計関数のヘルプを見れば、MaxとMinは数字以外でも有効なことは明記されてます。
あれ、
私のできませんね。
統計関数は、テキストでもできるはずですが、
正しく返しません。。。
Offline
関数ヘルプ「対象の有効な数値を返す」で、
・Max("あ";"い";"う") → (無)
・Max("あ10";"い2";"う3") → 10
・Max(GetAsDate("2013/10/1");GetAsDate("2013/10/10");GetAsDate("2013/10/2")) → 735151(2013/10/10の日付番号数値)
・GetAsDate( Max(GetAsDate("2013/10/1");GetAsDate("2013/10/10");GetAsDate("2013/10/2")) ) → 2013/10/10
なので、数字以外の文字列は無効です
Offline
ん?それはバージョンいくつ?FM12では
http://www.filemaker.com/12help/jp/html … tml#981659
Min や Max などの統計関数は、最初の引数のデータタイプを使用して全ての比較を行います。たとえば、最初の引数のデータタイプがテキストの場合、その他のすべての引数はテキストに変換されてから比較されます。
実際、Max("あ10";"い2";"う3")は、"う3"になります。
FM10とFM11でも「戻り値のデータタイプ
テキスト、数字、日付、時刻、タイムスタンプ」となってます。
SQLだとMAXでテキストフィールドも計算できますね。
(グローバル計算フィールドで)
ExecuteSQL ( "
SELECT \"名\", \"日\", MAX(\"項目1\"),MAX(\"項目2\"),MAX(\"項目3\")
FROM \"テーブル名\"
GROUP BY \"名\", \"日\"
ORDER BY \"名\", \"日\"
" ; Char(9) ; Char(13) )
& Left ( 名 & 日 & 項目1 & 項目2 & 項目3 ; 0 )
あじゃ!**);
サンプルの汎用性を持たせるためあえて古いバージョン(FMP9A)で検証してました。
今、改めてv9以降でテストしたら、テキストや日付にも有効へと仕様変更されているのを確認しました。
Char()やCode()関数のサポート時に変わったのかなあ?
マルチバージョン対応の汎用性を持たせるケースでは、先の代替式でということですネ。
Last edited by Hiro (2013-10-28 17:42:23)
Offline
返事が遅くなりすいません。
皆様の方法が理解できず、さっぱり応用できていない状況です。
同じ名前で同じ日付の共通の番号を作って、その共通番号のなかで集計とってる。
ということでしょうか?
もっと勉強してまいります。
Offline
Pages: 1
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 534.67 KiB (Peak: 555.58 KiB) ]