查找特定值的出现次数
Finding number of occurrences for specific value
我正在尝试在 FileMaker Pro 13 中创建一个字段(计算结果),它将 return 在特定字段中选择特定值的次数。
例如:
假设您有 Table 1。Table 1 只有 1 个字段名为字段 1。字段 1 是一个下拉列表字段,选项有 "A"、"B", & "C".以下数据来自 Table 1 使用字段的记录,字段 1:
记录 1: Table 1::Field 1 = "A"
记录 2: Table 1::Field 1 = "A"
记录 3: Table 1::Field 1 = "B"
记录 4: Table 1::Field 1 = "C"
我想要的是一个计数器,它在记录中搜索 table 一个,并找出某个选项被选中的次数。例如,我想知道在字段 1 中选择了多少次 "A",它会 return“2”。
到目前为止我尝试做的是以下内容,但效果不是很好(returns“?”):
执行SQL(
"SELECT 字段 1
来自 Table 1
WHERE 字段 1 = 'A'"
;"";"")
对正确的 SQL 脚本有什么建议吗?
Select count(*) from Table1 where Field1='A'
您的 Execute 的正确版本
ExecuteSQL(
"SELECT Count(\"Field 1\")
FROM \"Table 1\"
WHERE \"Field 1\" = ?"
;"";"";"A")
当您使用 ExecuteSQL 时,您将一个字符串传递给 FileMaker 的函数,然后 FileMaker 在幕后使用该字符串和您提供给它的各种其他片段来执行操作。
如果您的字段中有 space 或 table 名称,例如Field 1
,FileMaker 认为您的意思是“Select 一个字段名称 Field
和一个名为 1
的字段。如果字段名称包含 space,则需要引用该字段名称或特殊字符,但不能只使用常规双引号,因为那样会结束字符串。
修复方法就是我上面做的;转义字段或 table 名称周围的双引号。
此外,底部的 ?
和 "A"
允许您将数据传递到查询中,即参数化查询。这意味着你可以做一个循环,在循环的每次迭代中你传递一个不同的值,我有 "A"
。例如。你可以这样做:
ExecuteSQL(
"SELECT Count(\"Field 1\")
FROM \"Table 1\"
WHERE \"Field 1\" = ?"
;"";""; Table 1::Search Field)
或
ExecuteSQL(
"SELECT Count(\"Field 1\")
FROM \"Table 1\"
WHERE \"Field 1\" = ?"
;"";"";$searchValue)
不过要小心,如果您在 server/client 环境中,ExecuteSQL 不会缓存它提取的记录,因此如果您在 table 中有很多记录,此计算可能会变得非常缓慢],你正在越过广域网,或两者兼而有之。我建议尝试以不同的方式进行计数。
我正在尝试在 FileMaker Pro 13 中创建一个字段(计算结果),它将 return 在特定字段中选择特定值的次数。
例如:
假设您有 Table 1。Table 1 只有 1 个字段名为字段 1。字段 1 是一个下拉列表字段,选项有 "A"、"B", & "C".以下数据来自 Table 1 使用字段的记录,字段 1:
记录 1: Table 1::Field 1 = "A"
记录 2: Table 1::Field 1 = "A"
记录 3: Table 1::Field 1 = "B"
记录 4: Table 1::Field 1 = "C"
我想要的是一个计数器,它在记录中搜索 table 一个,并找出某个选项被选中的次数。例如,我想知道在字段 1 中选择了多少次 "A",它会 return“2”。
到目前为止我尝试做的是以下内容,但效果不是很好(returns“?”):
执行SQL(
"SELECT 字段 1
来自 Table 1
WHERE 字段 1 = 'A'"
;"";"")
对正确的 SQL 脚本有什么建议吗?
Select count(*) from Table1 where Field1='A'
您的 Execute 的正确版本
ExecuteSQL(
"SELECT Count(\"Field 1\")
FROM \"Table 1\"
WHERE \"Field 1\" = ?"
;"";"";"A")
当您使用 ExecuteSQL 时,您将一个字符串传递给 FileMaker 的函数,然后 FileMaker 在幕后使用该字符串和您提供给它的各种其他片段来执行操作。
如果您的字段中有 space 或 table 名称,例如Field 1
,FileMaker 认为您的意思是“Select 一个字段名称 Field
和一个名为 1
的字段。如果字段名称包含 space,则需要引用该字段名称或特殊字符,但不能只使用常规双引号,因为那样会结束字符串。
修复方法就是我上面做的;转义字段或 table 名称周围的双引号。
此外,底部的 ?
和 "A"
允许您将数据传递到查询中,即参数化查询。这意味着你可以做一个循环,在循环的每次迭代中你传递一个不同的值,我有 "A"
。例如。你可以这样做:
ExecuteSQL(
"SELECT Count(\"Field 1\")
FROM \"Table 1\"
WHERE \"Field 1\" = ?"
;"";""; Table 1::Search Field)
或
ExecuteSQL(
"SELECT Count(\"Field 1\")
FROM \"Table 1\"
WHERE \"Field 1\" = ?"
;"";"";$searchValue)
不过要小心,如果您在 server/client 环境中,ExecuteSQL 不会缓存它提取的记录,因此如果您在 table 中有很多记录,此计算可能会变得非常缓慢],你正在越过广域网,或两者兼而有之。我建议尝试以不同的方式进行计数。