みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
初めまして。
質問なのですが、ExecuteSQLでサブクエリはできるのでしょうか?
以下のテーブルで次のようなSQLを打つと結果が返ってこないので、教えていただきたいです。
DB内容
shipping
order_detail_record
unique_id:shipping_id:JAN:qty
1 :12345678 :1010:2
2 :12345678 :1020:1
count_detail_record
unique_id:shipping_id:JAN:qty
1 :12345678 :1020:1
2 :12345678 :1010:1
3 :12345678 :1010:1
ExecuteSQL (
"
select
odr.qty - cdr.qty
from
order_detail_record odr
join ( seletc
shipping_id,
jan,
sum(qty) as qty
from
count_detail_record cdr
group by
group by
shipping_id,jan,
)cdr on cdr.shipping_id = odr.shipping_id and cdr.jan = odr.jan
where
odr.shipping_id = ?
"
; "" ; "" ; shipping::id )
ここに説明書がありますが、サブクエリは使えるところもありますがFROMに使えるのはテーブルだけだったはずです。
https://help.claris.com/ja/sql-reference.pdf
ざっと見ましたが、UPDATEの例しかないようですが...WHEREには使えたはず。
質問のSQLは、group by が重複してるところがおかしいですね。
それと、joinの中がseletcにtypoしてます。
janも出さないと結果が意味不明になるので、これでどうですか。
ExecuteSQL (
"
select
odr.jan, max(odr.qty), sum(cdr.qty)
from
order_detail_record odr
join count_detail_record cdr
on cdr.shipping_id = odr.shipping_id and cdr.jan = odr.jan
where
odr.shipping_id = ?
GROUP BY odr.jan
"
; "" ; "" ; shipping::id )
結果
1010,2,2
1020,1,1
max(odr.qty), sum(cdr.qty)
を
max(odr.qty)-sum(cdr.qty)
とできれば一発で計算できるのですが、あいにく集計関数を計算に使うのはサポートされてません。
カンマを-に変えたりしてSQLの結果をEvaluateできるようにするなどの後処理が必要です。
何かもっと別のSQL構文でも可能かもしれないけど、ちょっと思いつかなかった。
回答ありがとうございます。
このSQLですが、実はifの中に組み込んで 条件分岐に使いたいと思っているので、
select内は「計算結果のみ」でないといけないと思っています。
こちらで試してみますが、うまくいかなかったらダメですかね・・・・
複数のjanの差数が複数行で結果に出てきますが、どういう条件ですか?
すべてが0かどうか?
Pages: 1
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 554.96 KiB (Peak: 582.18 KiB) ]