查找特定值的出现次数

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 中有很多记录,此计算可能会变得非常缓慢],你正在越过广域网,或两者兼而有之。我建议尝试以不同的方式进行计数。