みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
環境FM17 Win
集計についてつまづいています。
フィールド構成は画像のようになっています。
ここから好きな食べ物、嫌いな食べ物、好きな遊園地の集計が行ないたいです。
★レポート
■好きな食べ物
りんご:4
柿:2
梨:1
■嫌いな食べ物
さつまいも:3
れんこん:2
じゃがいも:2
レタス:1
■好きな遊園地
東京ディズニーランド:2
富士急ハイランド:2
ユニバーサルスタジオ:1
ご教授のほう、よろしくお願いします。
Offline
ご希望掲示例の集計結果をグローバル計算フィールドに書き出すものとして、
その計算式は、
Let(
[
#sql1=
ExecuteSQL(
"
SELECT ""好きな食べ物"" , COUNT(*)
FROM ""本テーブル名""
WHERE ""好きな食べ物"" IS NOT NULL
GROUP BY ""好きな食べ物""
"
; " : "
; ¶
)
;
#sql2=
ExecuteSQL(
"
SELECT ""嫌いな食べ物"" , COUNT(*)
FROM ""本テーブル名""
WHERE ""嫌いな食べ物"" IS NOT NULL
GROUP BY ""嫌いな食べ物""
"
; " : "
; ¶
)
;
#sql3=
ExecuteSQL(
"
SELECT ""好きな遊園地"" , COUNT(*)
FROM ""本テーブル名""
WHERE ""好きな遊園地"" IS NOT NULL
GROUP BY ""好きな遊園地""
"
; " : "
; ¶
)
];List("★レポート";"■好きな食べ物";#sql1;"■嫌いな食べ物";#sql2;"■好きな遊園地";#sql3)
& Left(好きな食べ物 & 嫌いな食べ物 & 好きな遊園地; 0))
▼計算結果
★レポート
■好きな食べ物
りんご : 4
柿 : 2
梨 : 1
■嫌いな食べ物
さつまいも : 3
じゃがいも : 2
れんこん : 2
レタス : 1
■好きな遊園地
ユニバーサルスタジオ : 1
東京ディズニ―ランド : 2
東急ハイランド : 2
Offline
Offline
Hiro様・Shin様
ExecuteSQL・クロス集計、解釈してスキル上げたいと思います。
どうもありがとうございました。
Offline
Hiro様
ExecuteSQLについてですが、このテーブルに
フィールド名:集計年月(yyyymm)(グローバルフィールド)を
付け加えて検索を行いたいのですが、どのように記述したら良いでしょうか?
#sql1=
ExecuteSQL(
"
SELECT ""好きな食べ物"" , COUNT(*)
FROM ""本テーブル名""
WHERE ""好きな食べ物"" IS NOT NULL
GROUP BY ""好きな食べ物""
"
; " : "
; ¶
)
;
よろしくお願いします。
Offline
>フィールド名:集計年月(yyyymm)(グローバルフィールド)を付け加えて検索を行いたい
検索用にグローバルフィールドをとなら話は分かるが、集計年月(yyyymm)(グローバルフィールド)では全てのレコードが同じ集計年月となりなんの役にもならないと思うが、たぶん言葉足らずだと思うので、例えば年月(yyyymm)(計算フィールド)がありさらに検索用にグローバルフィールドを集計年月(yyyymm)として付け加え
この場合 WHERE ""好きな食べ物"" IS NOT NULL は空欄(私は、null値は本当は空欄を意味しないと思うが、よく理解できない)はカウントしないので別になくても良いと思うので
WHERE ""年月"" =? GROUP BY ""好きな食べ物""" ; ":" ; ¶;テーブル名::集計年月)
WHERE句のダイナミックパラメータ?を:集計年月(yyyymm)(グローバルフィールド)に指定すれば良い
WHERE ""好きな食べ物"" IS NOT NULL and ""年月"" =? GROUP BY ""好きな食べ物""" ; ":" ; ¶;テーブル名::集計年月)でも・・・
>#5『フィールド名:集計年月(yyyymm)(グローバルフィールド)を付け加えて、検索を行いたい』
この年月フィールド追加の目的が、月間の日付を検索するためだとすれば、その必要はありません。
SQL関数では式中で期間の生成・指定(検索条件設定)が可能だからです。
●例(11月内指定): WHERE ""日付""<='2019/11/01' AND ""日付""<='2019/11/30'
●【修正式】(※集計月の指定にグローバル数値フィールド「g年月キー」(6桁数字:yyyymm)を設定するとして)
#sql1=
ExecuteSQL(
"
SELECT ""好きな食べ物"" , COUNT(*)
FROM ""本テーブル名""
WHERE ""好きな食べ物"" IS NOT NULL
AND ""日付"">=? AND ""日付""<=?
GROUP BY ""好きな食べ物""
"
; " : "
; ¶
; Date(Right(g年月キー;2)*1; 1; Left(g年月キー;4)*1) //「g年月キー」から「年月初日」を生成して1番目の?に代入
; Date(Right(g年月キー;2)+1; 0; Left(g年月キー;4)*1) //「g年月キー」から「年月末日」を生成して2番目の?に代入
)
;
なお、
>#6 koko009さん『WHERE ""好きな食べ物"" IS NOT NULL は空欄はカウントしないので別になくても良いと思う』
いいえ必須です。検証すれば即判りますよ。「空欄」も1項目としてカウント集計されてしまいます。
Offline
勘違いしていた!空欄があった場合count(*)の場合は空欄数もカウントするがcount(フィールド名)の場合空欄数は0となるのでカウントしないとしていた。申し訳ない。
なお、日付の追加に関しては、最初の質問に日付フィールドが無かったのであまり考えられないが日付がテキスト表示の場合もあるからと考えて、年月(yyyymm)(計算フィールド)があったとしてダイナミックパラメータ?の指定先として例示しただけです。
Hiro様・koko009様
お世話になります。
教えて頂いた、ExecuteSQL式で実現出来ました。
参考に教えてください。
; Date(Right(g年月キー;2)*1; 1; Left(g年月キー;4)*1) //「g年月キー」から「年月初日」を生成して1番目の?に代入
; Date(Right(g年月キー;2)+1; 0; Left(g年月キー;4)*1) //「g年月キー」から「年月末日」を生成して2番目の?に代入
この部分の1番目の?に代入、2番目の?に代入という部分なのですが、
?に入れる順番は上から順になるのでしょうか?
Offline
そう、"SQL構文"内の出現順です。
なお、「?」はダイナミック・パラメータ(=動的引数)と言われるものです。
一度、「SQL リファレンスガイド」に目を通されることをお勧めします。
Offline
お世話になります。
ありがとうございます。
「SQL リファレンスガイド」じっくり読みたいと思います。
Offline
Pages: 1
[ Generated in 0.009 seconds, 7 queries executed - Memory usage: 550.54 KiB (Peak: 571.45 KiB) ]