【问题标题】:How to evaluate a group of records in MS Access and get a single result如何在 MS Access 中评估一组记录并获得单个结果
【发布时间】:2025-11-24 10:00:02
【问题描述】:

我正在使用 MS Access,并且正在尝试评估记录子集以在报告中为该组生成单个值。如果该组的所有记录为 TRUE,则该组为 TRUE。我都是假的,然后小组评估为假。如果混合,则该组应评估为 BOTH

我有以下类型的数据,按名称分组,然后按部门分组

Name1
    dept1
         Job1       True 
         Job2       True

Name2
    dept1
         Job1       False
         Job2       False

Name3
    dept1
         Job1       False
         Job2       True

Name1 组为 TRUE,Name2 组为 False,Name3 组为 BOTH。有没有非 VBA 的方法来做到这一点?

提前致谢!

更新: 只有一个表(从 excel 导入)具有字段名称(ID、Name、Dept、Task、JobStatus)。

数据如下:

╔════╦══════╦══════╦════════════════════════╦═══════════╗
║ ID ║ Name ║ Dept ║          Task          ║TaskStatus ║
╠════╬══════╬══════╬════════════════════════╬═══════════║
║  1 ║ Jen  ║   01 ║ CC THEA PROD 2A        ║ TRUE      ║           
║  2 ║ Jen  ║   01 ║ CC THEA PROD 3B        ║ TRUE      ║           
║  3 ║ Jen  ║   02 ║ CC THEA PROD 1A        ║ FALSE     ║           
║  4 ║ Ted  ║   01 ║ TCHR EDUC TRNG I       ║ TRUE      ║           
║  5 ║ Ted  ║   01 ║ TCHR EDUC TRNG II      ║ FALSE     ║           
║  6 ║ Ted  ║   03 ║ CS PRINT AP            ║ FALSE     ║           
║  7 ║ Ted  ║   03 ║ CONF-HS                ║ FALSE     ║
║  8 ║ Ben  ║   02 ║ CC INFO MGMT           ║ TRUE      ║        
║  9 ║ Ben  ║   02 ║ ECON MOD PT            ║ TRUE      ║        
║ 10 ║ Ben  ║   05 ║ MMAN ISO               ║ TRUE      ║        
╚════╩══════╩══════╩════════════════════════╩═══════════╝

【问题讨论】:

  • 表中的这些记录是可以直接用SQL查询的,还是VBA中的对象表示这些数据?
  • 是的,如果它在报告中,那么您可以在组页脚的文本框中使用表达式。
  • @Dai 是的,数据在 MS Access 的表中。我根本没有使用 VBA,并且需要一个 no-=VBA 解决方案
  • @Harun24HR 我尝试了几个表达式,但无法弄清楚。你能扩展你的回答吗?
  • 那么请发布您的表架构 (CREATE TABLE...) 语句及其包含的数据示例。

标签: ms-access


【解决方案1】:

我在评论中的意思。我设计了一个类似下面的带有Dept 页脚部分的报告。

然后在Dept 页脚部分添加TextBox 并写下表达式。

=IIf(Count(*)=Sum(IIf([TaskStatus]=True,1,0)),"TRUE",IIf(Count(*)=Sum(IIf([TaskStatus]=False,1,0)),"FALSE","BOTH"))

这是我得到的结果。

编辑#

如果您希望它作为 SQL 查询输出的结果,请使用以下查询。请注意 Name 是保留字,所以我使用 tName 而不是 Name。为您的案例更改表名和字段名。

SELECT t.tName, t.Dept, 

IIF(Count(t.TaskStatus)=DCount("TaskStatus","Table1","tName='" & t.tName & "' AND Dept='" & t.Dept & "' AND TaskStatus='TRUE'"),"TRUE",
IIF(Count(t.TaskStatus)=DCount("TaskStatus","Table1","tName='" & t.tName & "' AND Dept='" & t.Dept & "' AND TaskStatus='FALSE'"),"FALSE","BOTH"))

AS Result FROM Table1 AS t
GROUP BY t.tName, t.Dept;

【讨论】:

  • 注意:我在表格设计中使用了TaskStatusYes/No 数据类型。如果您的数据类型是ShortText,那么您必须使用=IIf(Count(*)=Sum(IIf([TaskStatus]="TRUE",1,0)),"TRUE",IIf(Count(*)=Sum(IIf([TaskStatus]="FALSE",1,0)),"FALSE","BOTH"))
  • 我的 SQL 出现错误,看不到我的错误。我已取出第二条 IIF 语句以查看是否可以缩小问题范围,但它仍然在 Result 列中显示“#Error”。
    SELECT t.NameShort, t.Dept, IIf(Count(t .TaskStatus)=DCount("TaskStatus","SOF_Test","NameShort='" & t.NameShort & "' AND Dept='" & t.Dept & "' AND TaskStatus='TRUE'"),"TRUE" "FALSE") 作为 SOF_Test 的结果作为 t GROUP BY t.NameShort, t.Dept;
  • 如果你看到我的SQL查询,你需要正确放置单引号和双引号。您在 DCount() 函数中缺少单引号。
  • 谢谢我得到了这个工作。我也少了一个逗号。