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

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

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

You are not logged in.

Announcement

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


#1 2013-11-02 23:03:24

kn
Guest

他テーブルから条件にあった値を持ってくるには

Windows7 FM12Proです。

あるテーブルの計算フィールドにあるテーブルから条件にあった値を持って来たいと考えています。
以下、テーブルとフィールドです。

テーブル:生徒
フィールド:
生徒No(数字)
氏名(テキスト)
ランク(計算)←ランクテーブルから昇降格日が最新のランクを入れたい
昇降格(計算)←ランクテーブルから昇降格日が最新の昇降格を入れたい
昇降格日(計算)←ランクテーブルから最新の昇降格日を入れたい

テーブル:ランク
フィールド:
生徒No(数字)
ランク(数字)
昇降格(テキスト)"昇格"、"降格"
昇降格日(日付)

この二つのテールブルは生徒Noフィールドでリレーションを結んでいます。

ExecuteSQL関数を使えば良いのかと思い、試しに、生徒テーブルのランクの計算式として、以下を指定してみましたが、計算式が間違っているのか「?」と表示されてしまいます。

ExecuteSQL ("
SELECT ランク
FROM ランク
WHERE 生徒no = ? AND
  昇降格日 = (
    SELECT MAX(昇降格日)
    FROM ランク
)
" ; "" ; "" ; 生徒No )

何が問題なのでしょうか?
あるいはもっと良い可決方法がありましたらご教授ください。
なお、この式だけでは無理なのは分っていますが、本当はもしランクテーブルに対応したレコードが一件もない場合は、生徒テーブルの三つの計算フィールドはブランクにしたいと思っています。
よろしくお願いします。

#2 2013-11-03 09:58:38

wader
Member

Re: 他テーブルから条件にあった値を持ってくるには

リレーションのランク側に昇降格日で降順ソートを設定すれば、ランク::フィールド名 で最新データを参照できます。

ExecuteSQLでは、英数以外のテーブル/フィールド名は””で囲む必要があります。
WHERE条件にサブクエリが使えたかな?

Offline

#3 2013-11-03 12:54:32

kn
Guest

Re: 他テーブルから条件にあった値を持ってくるには

wader wrote:

リレーションのランク側に昇降格日で降順ソートを設定すれば、ランク::フィールド名 で最新データを参照できます。

できました。この方が単純で楽ですね。
この件は、この方法で解決したいと思います。ありがとうございました。

wader wrote:

ExecuteSQLでは、英数以外のテーブル/フィールド名は””で囲む必要があります。
WHERE条件にサブクエリが使えたかな?

そうだったんですね。見落としていました。
ただ、その部分を修正して試してみたのですが、どうもうまく行きません。
例えば、以下の様に、同じ「生徒No」で最大の「昇降格日」を持ってくるという至極単純なものもうまくできませんでした。

ExecuteSQL ("
SELECT MAX(\"昇降格日\")
FROM \"ランク\"
WHERE \"生徒No\" = ?
" ; "" ; "" ; 生徒No )

どこに間違いがあるでしょうか?

#4 2013-11-04 11:27:48

kn
Guest

Re: 他テーブルから条件にあった値を持ってくるには

自己解決しました。
FROMの後にテーブルオカレンスではなくてテーブル名を直接指定しようとしていたこと、リレーションシップグラフを操作するときにランク(テーブル)を別名のオカレンス名にしていたことが原因でした。
なのでこれを同名にしたところうまく行きました。
また、サブクエリを使った以下の計算式も正常に動作しました。

ExecuteSQL ("
SELECT \"ランク\"
FROM \"ランク\"
WHERE \"生徒no\" = ? AND
  \"昇降格日\" = (
    SELECT MAX(\"昇降格日\")
    FROM \"ランク\"
    WHERE \"生徒no\" = ?
)

ありがとうございました。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.008 seconds, 7 queries executed - Memory usage: 551.88 KiB (Peak: 579.69 KiB) ]