计算表/查询中存在字段的次数

时间:2013-12-27 15:08:54

标签: vba ms-access count access-vba

我有一个包含Project#,Project for Project,Status Color(可以是红色,绿色,黄色)的表。 “状态颜色”列是一个文本字段,表示红色绿色或黄色。

所以在桌子上,我可以,让我们说一个项目的20个组件,其中10个项目的状态是红色(晚期),5个黄色(预计会迟到),5个绿色。

我在Access中创建了一个摘要表单,在过滤特定项目后有四个字段

项目总组件: _ 总红色: 总黄色: 总绿色: _

我希望VBA脚本查看所选的特定项目,然后计算我有多少个红色,绿色和黄色组件。我一直在努力创造一个能够看到桌子并填写表格的VBA。选择/过滤项目的VBA并不难,但计数是。

有什么建议VBA脚本会是什么?

3 个答案:

答案 0 :(得分:1)

我不了解您的摘要表格的详细信息。但是,我认为GROUP BY查询将汇总您想要的数据。

SELECT
    [Project #],
    [Status Color],
    Count(*) AS how_many
FROM YourTable
GROUP BY
    [Project #],
    [Status Color];

如果该查询在调整表和字段名称后返回所需内容,则可以将其用作表单的记录源。然后你可能不需要任何VBA ...只需将文本框绑定到记录源字段。

答案 1 :(得分:0)

你需要一个Transform(又名Pivot)才能做到这一点。我创建了一个包含几个字段的新表:

  • 键(我将此字段留空,因为您需要一个具有相同值的列来旋转)
  • ProjNum
  • 部件
  • 颜色

将它们放在名为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 #]