我有一个包含Project#,Project for Project,Status Color(可以是红色,绿色,黄色)的表。 “状态颜色”列是一个文本字段,表示红色绿色或黄色。
所以在桌子上,我可以,让我们说一个项目的20个组件,其中10个项目的状态是红色(晚期),5个黄色(预计会迟到),5个绿色。
我在Access中创建了一个摘要表单,在过滤特定项目后有四个字段
项目总组件: _ 总红色: 总黄色: 总绿色: _
我希望VBA脚本查看所选的特定项目,然后计算我有多少个红色,绿色和黄色组件。我一直在努力创造一个能够看到桌子并填写表格的VBA。选择/过滤项目的VBA并不难,但计数是。
有什么建议VBA脚本会是什么?
答案 0 :(得分:1)
我不了解您的摘要表格的详细信息。但是,我认为GROUP BY
查询将汇总您想要的数据。
SELECT
[Project #],
[Status Color],
Count(*) AS how_many
FROM YourTable
GROUP BY
[Project #],
[Status Color];
如果该查询在调整表和字段名称后返回所需内容,则可以将其用作表单的记录源。然后你可能不需要任何VBA ...只需将文本框绑定到记录源字段。
答案 1 :(得分:0)
你需要一个Transform(又名Pivot)才能做到这一点。我创建了一个包含几个字段的新表:
将它们放在名为tblTemp的表中。我的SQL看起来像这样:
TRANSFORM Count(tblTemp.[ProjNum]) AS CountOfProjNum
SELECT tblTemp.[Keys], Count(tblTemp.[ProjNum]) AS [Total Of ProjNum]
FROM tblTemp
GROUP BY tblTemp.[Keys]
PIVOT tblTemp.[Color];
它按预期工作,给了我一个总列(ProjNum总数)和一个红色,绿色和黄色列。我相信您可以相应地编辑代码并获得所需的结果。
由于您看起来只想要一个特定的ProjNum,因此您可能需要在此SQL语句中添加WHERE子句以将其过滤掉。 WHERE子句将在FROM之后和GROUP BY之前。
答案 2 :(得分:0)
这应该这样做。将'Iif'改为'Case When ... Else ... End'如果需要的话。
SELECT
[Project #],
SUM(Iif ([Status Color] = "Red", 1,0)) as CountRed,
SUM(Iif ([Status Color] = "Yellow", 1,0)) as CountYellow,
SUM(Iif ([Status Color] = "Green", 1,0)) as CountGreen,
SUM(Iif ([Status Color] <> "Red"
and [Status Color] <> "Yellow"
and [Status Color] <> "Green", 1,0)) as CountOther
FROM YourTable
GROUP BY
[Project #]