備忘録26〜FileMaker〜ExecuteSQL 関数
前回・前々回と勉強と実践の上で便利だった関数を紹介しました。Let関数とJSON関数です。
ExecuteSQL 関数をつかってみた。
表示している(現在居る)テーブルに関係なく値を算出できるとの事・・・
通常は、リレーションを作り関連レコードの値を出力するが、この関数はそれがいらないようです。
構文 ExecuteSQL ( SQL クエリー ; フィールド区切り ; 行区切り { ; 引数…} )
ExecuteSQL (
//SQLクエリー
"SELECT(\"消費税額\")
FROM \"納品明細\"
WHERE \"_fk_請求書id\" = ? AND \"消費税率\" = ?"
;
//フィールド区切り
"" ;
//行区切り
"" ;
//引数・・・WHEREで=?に入る値、フィールド名でもOK
"0000001" ; "0.1" )
今後、また消費税が変更されることを想定して10%の税率で作成された納品明細のリストを出してみます。
500 260
とでてきました。税率が15%と10%が混在していてもリストアップができそうです。
合計できないのか???
テキストだとリスト形式で使い道があるようです。 レイアウト切替を勉強している時にJSONじゃないやり方でList関数とGetvalue関数で 上からN個目の値を出して、その名称のレイアウトに切り替えるというのをやっていた。
今回は、数値なのでそもそも合計して出したい。
調べると、SELECT SUMで合計できるとある。
ExecuteSQL (
"SELECT SUM(\"消費税額\")
FROM \"納品明細\"
WHERE \"_fk_請求書id\" = ? AND \"消費税率\" = ?"
; "" ; "" ; "0000001" ; "0.1" )
760
で値が出てきました。
おお、リレーションを組んでいないのに合計されました。
ただし、合計する対象が多かったりすると遅いらしい
ここの記事で見ると、3000件のデータから合計すると4秒ほどかかるようでした。
検索の条件やレコード数によるようですが、あまりに対象が多い場合は従来通りリレーションを作って合計した方が
早いのかもしれません。
他にもできること
先程のSUMのところを変更すると
AVG:平均値
COUNT:個数
MAX:最大値
MIN:最小値
が取得できます。
=?にしているところを
>、<、<=、>=、IS NULLなどにすることで範囲やフラグなしとかの検索ができます。
先人達のサイトを見ながら少し覚えましたが
簡単なものは自分で計算式をかけるようになりましたが、複雑な物になると難しいです。
ExecuteSQL関数のユーティリティとして開発されたものがありましたので、ご紹介です。
最初のSQLExplorerはウィザード式で、初心者でも簡単に組むことができます。
全部英語表記ですが、説明動画もあるので見ながら設定していくとすぐにできます。
QUERY BUILDERの方は、少し自分で組める状態で使うと便利だと思います。
ExecuteSQL関数で組んだあとの構文エラーとか出てくるので、わかりやすいかと思います。
SQLがよくわからないけど、試したいって場合は、SQLExplorerをおすすめします。
英語だけど親切設計なので・・・
まとめ
使い所を間違わなければ、非常に便利な関数です。
あまりに、複雑なことをしなければ快適に使えるのではないかと思います。
ディスカッション
コメント一覧
まだ、コメントがありません