访问:来自多个列和变量列的总和

时间:2018-10-23 07:36:28

标签: vba ms-access access-vba

table1中,我有一个字段Pianificato和很多名为Wxx_yyyy的列。

我需要更新Table1.Pianificato作为满足特定条件的所有W列的总和。

我应该应用的标准是xx高于某个值。

在此示例中,xx>2。因此,Table1.W01_2018Table1.W02_2018将不被视为总和。

我认为查询不能满足这个复杂的请求。因此,我认为唯一的方法是VBA。

enter image description here

1 个答案:

答案 0 :(得分:1)

如果要避免使用VBA,并且Wxx字段不超过50个,则UNION可以重新排列字段。应该有一个唯一的标识符字段-将使用自动编号。由于我怀疑有52个Wxx字段,并且您不希望W01_2018和W02_2018字段,请排除这两个字段。

SELECT ID, W03_2018 AS Data, "W03_2028" AS WkYr FROM tablename
UNION SELECT ID, W04_2018, "W04_2018" FROM tablename
. . . 
UNION SELECT ID, W52_2018, "W52_2018" FROM tablename;

然后在汇总查询中使用该查询:

SELECT ID, Sum(Data) AS Planificato FROM UnionQuery GROUP BY ID;

当您要对另一组星期和/或年份进行计算时,会出现问题-必须修改UNION。

可能更希望使用VBA方法,例如:

Sub CalcPlanificato()
Dim rs As DAO.Recordset
Dim lngP As Long, x As Integer

Set rs = CurrentDb.OpenRecordset("SELECT * FROM Table1;")
While Not rs.EOF
    For x = 3 To 52
        lngP = lngP + rs.Fields(x)
    Next
    rs.Edit
    rs!Planificato = lngP
    rs.Update
    rs.MoveNext
    lngP = 0
Wend

End Sub

代码假定字段按表中的顺序排列,如示例所示。假设Planificato是第一个领域。假设有52个Wxx字段。 Wxx字段由索引引用,并且W03_2018在列4的索引3中。