在table1
中,我有一个字段Pianificato
和很多名为Wxx_yyyy
的列。
我需要更新Table1.Pianificato
作为满足特定条件的所有W列的总和。
我应该应用的标准是xx高于某个值。
在此示例中,xx>2。因此,Table1.W01_2018
和Table1.W02_2018
将不被视为总和。
我认为查询不能满足这个复杂的请求。因此,我认为唯一的方法是VBA。
答案 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中。