みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっております。
下記、行き詰まり、ご相談させてください。
Win7 FM11ProAdv FM11server
あるリレーションより取得したLIST関数でテキストフィールドに改行にて取得しています。
1 関西
1 関西
1 関西
1 関西
1 関西
1 関西
1 中部
1 中部
2 東北
2 東北
2 東北
2 東北
2 北陸
2 北陸
2 北陸
2 北陸
という結果なんですがこの結果を違うテキストフィールドで
1 関西、6台/中部、2台 2 東北、4台/北陸、4台
という1行で表記したいです。
関西や中部などは日本のエリアを表示しており
値一覧より各エリアを選択しています。
各エリアのグローバルフィールドを作成して台数をカウントする方法は構造上できません。
あくまで現状あるLIST関数の結果を上記1行の結果に表すことは可能でしょうか。
よろしくお願いします。
Offline
BaseElementsプラグイン(無料)をインストールして、SQL関数でやる。
BaseElementsプラグイン(無料)をインストールして、SQL関数でやる。
ありがとうございます。
改行の重複する個数を数えるのはファイルメーカーに備わった機能では無理ということでしょうか。
SQLとか全くわからないもので・・・
Offline
FM11ですから、
ExecuteSQL関数
はないですね。
書かれた順になるようにソートして、
スクリプトで最初から順に数えてゆけばできるでしょう。
と言っても、細かいところで面倒そうですが。。
Offline
カスタム関数でもできるけど、Listにする前のデータを集計するのがデータベースというものですが・・・
こんな感じで2個定義
List_Delete_Values(values;value)
Let ( [
v = Char(1) & value & Char(2) ;
vl = Char(1) & Substitute ( values ; ¶ ; Char(2) & Char(1) ) & Char(2) ;
r = Substitute ( Substitute ( vl ; v ; "" ) ; Char(2) & Char(1) ; ¶ )
] ;
Middle ( r ; 2 ; Length ( r ) - 2 )
)
List_Count(values;colsep;rowsep)
Case (
values = "" ; "" ;
Let ( [
v = GetValue ( values ; 1 ) ;
vl = Char(1) & Substitute ( values ; ¶ ; Char(2) & Char(1) ) & Char(2) ;
vs = Char(1) & v & Char(2) ;
re = List_Delete_Value ( values ; v )
] ;
v & colsep & PatternCount ( vl ; vs ) & Case ( re <> "" ; rowsep & List_Count ( re ; colsep ; rowsep ) )
)
)
Char(1)Char(2)は、そんな文字は使わないだろうという前提です。
List_Count(フィールド;"、";"/")
のように使う。
みなさまありがとうございます。
なかなか難しそうなのでリレーション先の照合でカウントしていく形にシフトしようと思います。
めんどうなこと、というのがわかっただけでも助かりました。
ありがとうございました。
Offline
こうした方が少し速かった。
Case (
values = "" ; "" ;
Let ( [
v = GetValue ( values ; 1 ) ;
re = List_Delete_Value ( values ; v )
] ;
v & colsep & ( ValueCount ( values ) - ValueCount ( re ) )
& Case ( re <> "" ; rowsep & List_Count ( re ; colsep ; rowsep ) )
)
)
Pages: 1
[ Generated in 0.019 seconds, 9 queries executed - Memory usage: 515.33 KiB (Peak: 519.87 KiB) ]