初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2015-05-23 23:51:43

harami
Guest

ExcuteSQL関数に関して

FileMakerPro13 MacOS10.9 で使用しています。

やりたいことは、顧客ごとの取引明細から特定の商品の取引数を月別に表示したいと思っています。
リレーションシップグラフだと、多量になってしまうので、ExcuteSQL関数でスマートに表示できないかと考えました。

顧客テーブルには
顧客ID

取引明細テーブルには
顧客ID
商品区分コード
金額
数量
取引日

があります。


そこで2012年の1月の特定品目の顧客別の取引数を出したく、

ExecuteSQL ("
SELECT SUM (a.\"数量\" ) FROM \"取引明細テーブル\" a \"顧客テーブル\" b
WHERE a.\"顧客ID\" =b.\"顧客ID\" AND a.\"商品区分コード\"=1  AND  a.\"取引日\" >= ? AND  a.\"取引日\" <= ?
"
; "" ; ""  ; Date ( 1 ; 1 ; 2012 ) ; Date ( 2 ; 1 ; 2012 ) -1 )

としてみたのですが、「?」が返されます。

SQLに関しては、全くの素人なので、いろいろ調べて記述してみたのですが、どこが間違っているのかさっぱり分かりません。
どなたか宜しくお願いします。

#2 2015-05-24 10:05:39

Moz
Member

Re: ExcuteSQL関数に関して

ExecuteSQL ( "SELECT SUM ( a.\"数量\" ) FROM \"取引明細テーブル\" a, \"顧客テーブル\" b
WHERE a.\"顧客ID\" = b.\"顧客ID\" AND a.\"商品区分コード\"=1 AND a.\"取引日\" >= ? AND a.\"取引日\" <=?" ; "" ; ""  ; Date ( 1 ; 1 ; 2012 ) ; Date ( 2 ; 1 ; 2012 ) - 1 )

\"取引明細テーブル\" a, \"顧客テーブル\" b

違いはたぶんここだけです。

ヘルプと合わせて読むと理解が深まるドキュメントがあります。
http://notonlyfilemaker.com/2014/01/missing-executesql/

Last edited by Moz (2015-05-24 10:07:34)

Offline

#3 2015-05-25 12:08:25

harami
Guest

Re: ExcuteSQL関数に関して

Moz様
返答有り難うございます。
「,」が抜けていただけとは・・・
あと、テーブル名ではなく、テーブルオカレンス名を指定しないといけないことに気づきました。
「,」を入れ、テーブル名と同じテーブルオカレンスを作れば、結果は出たのですが、意図していた結果とは違いいろいろ試行錯誤してみましたところ

ExecuteSQL ("SELECT SUM(a.\"数量\")  FROM \"取引明細テーブル\" a  INNER JOIN  \"顧客テーブル\" b
ON a.\"顧客ID\"=b.\"顧客ID\" AND a.\"商品区分コード\"= 1
WHERE b.\"顧客ID\"=? AND a.\"診療費発生日\" >=? AND a.\"診療費発生日\" <=? "
; "" ; ""  ; 顧客テーブル::顧客ID ; Date ( 1 ; 1 ; 2012 ) ; Date ( 2 ; 1 ; 2012 ) -1  )

としましたら、希望通りの結果が帰ってきました。

第2,第3引数を変えれば、1月〜12月までの月別の集計フィルールドが作れそうです。
ExcuteSQL関数は、リレーションシップグラフを作らなくて済むので、今後も使えそうです。

有り難うございました。

#4 2015-05-25 14:15:07

calcer
Guest

Re: ExcuteSQL関数に関して

結局bは使ってないので、bにない顧客IDがあるような異常データでなければ
ExecuteSQL ("SELECT SUM(\"数量\")  FROM \"取引明細テーブル\"
WHERE \"顧客ID\" = ? AND \"商品区分コード\"= 1 AND \"診療費発生日\" >=? AND \"診療費発生日\" <=? "
; "" ; ""  ; 顧客テーブル::顧客ID ; Date ( 1 ; 1 ; 2012 ) ; Date ( 2 ; 1 ; 2012 ) -1  )
でも同じ?

#5 2015-05-25 15:56:30

harami
Guest

Re: ExcuteSQL関数に関して

calcer様
返信ありがとうございます。
確かに、上記の記述でもまったく同じ結果が得られました。

とても、シンプルな記述になりました。
ExcuteSQL関数に関してはまだまだ、勉強不足で申し訳ありません。

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 512.95 KiB (Peak: 519.55 KiB) ]