2016-03-21 20 views
0

次のサンプルクエリの最適化と結果の処理に関するアドバイスを探しています。使用中のSQL変異体は、次の構文を使用してSELECT文に制限されている内部のFileMakerは、ExecuteSQLエンジンです:SQLクエリと処理結果を最適化する

SELECT [DISTINCT] {* | column_expression [[AS] column_alias],...} 
FROM table_name [table_alias], ... 
[ WHERE expr1 rel_operator expr2 ] 
[ GROUP BY {column_expression, ...} ] 
[ HAVING expr1 rel_operator expr2 ] 
[ UNION [ALL] (SELECT...) ] 
[ ORDER BY {sort_expression [DESC | ASC]}, ... ] 
[ OFFSET n {ROWS | ROW} ] 
[ FETCH FIRST [ n [ PERCENT ] ] { ROWS | ROW } {ONLY | WITH TIES } ] 
[ FOR UPDATE [OF {column_expression, ...}] ] 

クエリ:

SELECT item1 as val ,interval, interval_next FROM meddata 
    WHERE fk = 12 AND active1 = 1 UNION 
SELECT item2 as val ,interval, interval_next FROM meddata 
    WHERE fk = 12 AND active2 = 1 UNION 
SELECT item3 as val ,interval, interval_next FROM meddata 
    WHERE fk = 12 AND active3 = 1 UNION 
SELECT item4 as val ,interval, interval_next FROM meddata 
    WHERE fk = 12 AND active4 = 1 ORDER BY val 

これはサンプルとして、以下の結果を与えることがあります。私は(最適化のための提案に加えて)を達成するために探しています何

val,interval,interval_next 
Artelac,0,1 
Artelac,3,6 
Celluvisc,1,3 
Celluvisc,12,24 

は次のようにフォーマットされた結果である。

val,interval,interval_next,interval,interval_next,interval,interval_next,interval,interval_next ->etc 
Artelac,0,1,3,6 
Celluvisc,1,3,12,24 

この処理結果は、SQLエンジンによって生成されることをお勧めします。

可能ですか?

ありがとうございます。

EDIT:結果の一部ではありませんが、わかりやすくするために結果に列名を含めました。私は、結果に 'interval'と 'interval_next'の任意の数の列があるかもしれないことを説明したいと思います。

+0

'case when then'節がありますか? – wonderbell

+0

@wonderbellはい、 'then then'がサポートされています。 – AndreasT

+0

別のval(例:Artelac)が1つの行にしか見つかりませんか?それは2列以上で見つけることができますか?たとえば、あなたは{Artelac、0,1}、{Artelac、3,6}、{Artelac、4,8}を持つことができますか?その場合、望ましい結果は何でしょうか? –

答えて

1

私はあなたのクエリを最適化する必要はないと思う、私によく見えます。

FQLではサポートされていないTSQLのPIVOTのようなものを探しています。最大の問題は、返される列の可変数になることです。

私は最良の方法は、中間結果を取得し、それをピボットするためにFileMakerスクリプトまたはカスタム関数を使用することだと思います。

別のvalのリストを取得し、各行のFQLステートメントを使用して(CFまたはスクリプトを使用して)個別のvalおよびloopをループすることもできます。同じ数の列が必要なので、それらを結合で結合することはできません。

+0

ありがとうございます。私はクエリそのものが正しいことを知っておいてよかったです。私は連結ジョブのための再帰的なCFまたはFMスクリプトを調べます。 – AndreasT