日本語難しいね。 SQLでいうGROUP BYだね。 FileMakerではどうやるのか検索してみたけど出てこなかったから考えてみた。
例
テーブルA
テーブルAの内容は ID:テキストor数値 値段:数値 小計:集計 小計はデータベースの集計で値段の集計。 レイアウトのパート設定で全部小計または後部承継を追加して、IDを区切りフィールドに選択。 下記はサンプルデータ。
ID | 値段 |
---|---|
1 | 1000 |
1 | 1500 |
1 | 2000 |
1 | 1000 |
小計 | 5500 |
2 | 1200 |
2 | 3000 |
小計 | 4200 |
テーブルB
テーブルBのテーブル設定は ID:テーブルAのIDと同じ設定 小計:数値 のみ。 あくまで例なので最小限。
ID | 値段 |
---|---|
1 | 5500 |
2 | 4200 |
テーブルAからテーブルBのように小計をまとめたテーブルを作る。 すぐできるのかなと思ってたら、割とないもんなんだね。
スクリプト
ウインドウタイトルの設定 [現在のウインドウ; 新規タイトル: "テーブルA"]
新規ウインドウ [スタイル: ドキュメント; 名前: "テーブルB" 使用するレイアウト:「テーブルB」 (テーブルB)]
ウインドウを選択 [名前:"テーブルA"]
レコードのソート [記憶する; ダイアログあり: オフ] //ここはIDでソート
レコード/検索条件/ページへ移動 [最初の]
変数を設定 [$検索済ID; 値:""]
変数を設定 [$検索ID; 値:テーブルA::ID]
Loop
If [$検索済ID ≠ $検索ID]
変数を設定 [$検索済ID; 値:$検索ID]
変数を設定 [$小計; 値:GetSummary ( テーブルA::小計 ; テーブルA::ID )]
ウインドウを選択 [名前:"テーブルB"]
新規レコード / 検索条件
フィールド設定 [テーブルB::ID; $検索ID]
フィールド設定 [テーブルB::小計; $小計]
ウインドウを選択 [名前:"テーブルA"]
End If
レコード/検索条件/ページへ移動 [次の ; 最後まできたら終了: オン]
変数を設定 [$検索ID; 値: テーブルA::ID]
End Loop
IDでソートして小計データを作り、GetSummaryでその小計データをレコードBに埋め込む。 一度取得したIDはそれ以降は無視。 概念としてはそんな感じ。
普通に機能としてあっていいと思う
同じテーブル上でテーブルAの小計だけ表示することはできるんだけど、CSVとかで出力することができないんだよね。 だからこういうことをしなければならないんだけど。 全銀フォーマットのデータ出力するときにテキストデータを吐き出さなきゃならないから、これを作らなければならなかったんだけど全銀フォーマットのしょうもなさと相まってかなり苦労してしまった。 備忘録として掲載。