みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
どなたか教えて頂けないでしょうか?
宜しくお願い致します。
ExecuteSQLにて見よう見まねで何とか商品毎の売上など抽出出来るようになりました。
大根,2,1200
人参,1,100
タマネギ,3,90
のように複数行でなっている物を
大根 2個 1,200円
人参 1個 100円
タマネギ 個 3,90円
のように"個"や"円"スペース等を付け対したいです。
どのような方法がありますでしょうか?
ExecuteSQLの中に
&"円"
等とやっても出来ませんでした。
宜しくお願い致します。
FMA14
MacOS 10.11.16
FM標準機能を使わず、わざわざ低機能のSQLインターフェースを使う理由は?
Offline
Hiro様
返信有り難うございます。
SQLにした理由は単に商品毎等に集計する方法が簡単そうだったからです。
他にもっと良い方法がありそうですが、教えて頂けたら幸いです。
宜しくお願い致します。
補足ですが用途は表示だけで無くテキストでまとめてメールで送れるようにしたいです。
なので集計フィールドは避けた方が良いと思いました。
(自分が理解していないだけと思いますが)
宜しくお願い致します。
Hiro様
返信有り難うございます。
集計フィールド使用を勉強したいと思います。
その上で可能性や学習としてお聞きしたいのですが上記複数行のテキストの場合、行毎に任意の場所に任意の文字を入れる事は出来ますでしょうか?
前述の大根等の場合
行毎に左から2個目のスペースに"個"末尾に"円"
のような。
宜しくお願い致します。
レイアウト上のフィールドの表示書式指定は、インスペクタのデータタグで設定出来ます。
Offline
単位マスタを作って小計パートの品名の右にマージフィールド<<マスタ::単位>>を置けば
大根 2本
人参 1本
タマネギ 1個
もできるかも?
Offline
どうしても書き出しは テキスト ということになると
それぞれの数値フィールドに対して 個のフィールド &"個" 円のフィールドには 円のフィールド &”円”
と計算フィールドにして
それらを書き出せばいいとも思うけど
Last edited by シャチ (2016-12-26 09:16:24)
Offline
SQLでの連結は+か|| 文字定数はダブルでなくシングル’個'
だけど、SUM()など集計関数の結果に対しての演算ができない(FMの制限)ので、この場合は無理そう。
3ケタカンマも、ほぼ不可能だし。
どうも、フィールドに関しての解釈が違うようにおもうのですが。
計算は集計フィールドのもの扱えますが。
FMPにはFMPの考え方があると思うのですが。
Last edited by シャチ (2016-12-26 09:41:01)
Offline
ああ、引用しないで書いたのでわかりにくかったかもしれませんけど、私のコメントはExecuteSQLでやるとしたらどうなるか、という最初の質問に対する回答です。結論は「無理でしょう」
集計フィールドを計算で使う場合はGetSummary()関数を使いますね。メールならPDFの方がお勧めです。
集計フィールド & ”テキスト” も計算結果を残せます。
Offline
レイアウト上で書式を設定しておき、エクスポートの際にその書式を適応させれば良いだけでは。数値の単位や3桁カンマも活きますよ。
Offline
ExecuteSQLの場合:
単位だけなら、クエリーを
select
"名"
,SUM("数量")
,'_(:3」∠)_個'
,SUM("金額")
,'_(:3」∠)_円'
FROM "テーブル"
GROUP BY "名"
ExecuteSQL ( $query ; "" ; "" )
※フィールド区切り は、デフォルトの コンマ を想定
このようにしておいて、不要な文字列を置換すれば、比較的カンタンに単位がつけられます。
Substitute ( result ;
[",_(:3」∠)_個" ; "個"]
; [",_(:3」∠)_円" ; "円"] )
Last edited by qb_dp (2016-12-26 11:03:04)
Offline
ExecuteSQLの場合:
以下のようにすれば、
スペースも3桁コンマ区切りも処理できました。
書き方のコツをつかめば、場合によっては、ラクです。
クエリーを
"
select
'\"'||\"名\"||'__\"&'
,SUM(\"数量\")
,'&\"個__\"'
,'&NumToJText ('
,SUM(\"金額\")
,'; 1 ; 0 )'
,'&\"円\"'
FROM \"テーブル\"
GROUP BY \"名\"
"
ExecuteSQL ( $query ; " " ; " & Char ( 13 ) & " )
※フィールド区切り は、スペース
このようにしておいて、「Evaluate」を実行。
Evaluate ( $result )
※上記のクエリーは、スクリプト内に記述した場合で、フィールド内に記述した場合は、以下のようになります。(エスケープなし)
select
'"'||"名"||'__"&'
,SUM("数量")
,'&"個__"'
,'&NumToJText ('
,SUM("金額")
,'; 1 ; 0 )'
,'&"円"'
FROM "テーブル"
GROUP BY "名"
Last edited by qb_dp (2016-12-26 13:52:55)
Offline
なるほどー、別の列にしてしまえばいいのか。
> #16 qb_dpさん、流石!
ここのマスターさんは何時も素敵な♦ヒラメキ♦を披露くださる。
SQLの結果を、関数式の定義にしてしまうとは!!
Last edited by Hiro (2016-12-26 17:59:35)
Offline
レス、遅くなり申し訳ありません。
大変貴重な返信の数々、ありがとう御座います。
qb_dpさんの方法はかなり高度な物と思いますが、時間かけて勉強させて頂きます。
恐らくEvaluateを使うので再帰的に計算すると思うのですが現状では理解できません。。
取りあえずスクリプトで行数を取得、その数までループ、Substituteにて置換、として何とか行毎に装飾できました。
高度且つ有益なご教授ありがとうございました。
まだ理解できていないので1つずつ勉強させて頂きます。
>Evaluateを使うので再帰的に計算
再帰ではないですよ。簡単に例えれば、SQLの結果を
1,2
でなく
1+2
になるようにして、結果として3を得るようなものです。
qb_dpさんのSQL活用の新展開は絶妙ですが、本案件の解法としてSQLはやはりお薦め出来ません。
初心者なら直の事、FMの標準的な集計法である集計レイアウトによる解法をまずはマスターされた方が、...
Offline
確かに、まずは標準機能を学んでいきたいと思います。
ありがとう御座いました。
ややこしそうに見えますが、意外と単純ですよ。
select
'"'||"名"||'__"&'
,SUM("数量")
,'&"個__"'
,'&NumToJText ('
,SUM("金額")
,'; 1 ; 0 )'
,'&"円"'
FROM "テーブル"
GROUP BY "名"
フィールド名を変更して「WHERE」を追加すれば、流用は、カンタンかと思ったりします。
私は、結構利用しています。「ExecuteSQL」(^^;)
Offline
qb_dp様
とても高度な方法を教えて下さり有り難うございます。
色々上記を元に試したのですが上手くいきません。
出来ましたら教えて頂けないでしょうか?
現在
ExecuteSQL (
"SELECT \"商品名\", SUM(\"数量\"), SUM(\"金額\")
FROM \"deta\"
WHERE \"日付\" = ?
GROUP BY \"商品名\""
; "" ; "" ; 日付
)
にて単純な集計が出来ています。
これをqb_dp様の式に当てはめようとして
ExecuteSQL (
"select
'"'||"商品名"||'__"&'
,SUM("数量")
,'&"個__"'
,'&NumToJText ('
,SUM("金額")
,'; 1 ; 0 )'
,'&"円"'
FROM "deta"
WHERE \"日付\" = ?
GROUP BY "商品名"
; "" ; "" ; 日付"
)
等々やってみたのですが上手くいきません。
どうか上記項目の場合どうすれば良いかご教授頂けないでしょうか?
何度も申し訳ありません。
宜しくお願い致します。
ExecuteSQLの場合:
以下のようにすれば、
スペースも3桁コンマ区切りも処理できました。
書き方のコツをつかめば、場合によっては、ラクです。クエリーを
" select '\"'||\"名\"||'__\"&' ,SUM(\"数量\") ,'&\"個__\"' ,'&NumToJText (' ,SUM(\"金額\") ,'; 1 ; 0 )' ,'&\"円\"' FROM \"テーブル\" GROUP BY \"名\" "
ExecuteSQL ( $query ; " " ; " & Char ( 13 ) & " )
※フィールド区切り は、スペースこのようにしておいて、「Evaluate」を実行。
Evaluate ( $result )
※上記のクエリーは、スクリプト内に記述した場合で、フィールド内に記述した場合は、以下のようになります。(エスケープなし)
select '"'||"名"||'__"&' ,SUM("数量") ,'&"個__"' ,'&NumToJText (' ,SUM("金額") ,'; 1 ; 0 )' ,'&"円"' FROM "テーブル" GROUP BY "名"
> これをqb_dp様の式に当てはめようとして
「"」のエスケープなしの式を適用するなら、そのクエリー式部をフィールド内に記述 にしないと!
Offline
[ Generated in 0.006 seconds, 8 queries executed - Memory usage: 575.2 KiB (Peak: 612.1 KiB) ]