備忘録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をおすすめします。

英語だけど親切設計なので・・・

まとめ

使い所を間違わなければ、非常に便利な関数です。

あまりに、複雑なことをしなければ快適に使えるのではないかと思います。

スポンサーリンク