Доступ: суммирование значений из нескольких и переменных столбцов - PullRequest
0 голосов
/ 23 октября 2018

В table1 у меня есть поле Pianificato и много столбцов с именем Wxx_yyyy.

Мне нужно обновить Table1.Pianificato как сумму всех W-столбцов, которые удовлетворяютопределенные критерии.

Критерии, которые я должен применять, состоят в том, что xx выше определенного значения.

В этом примере xx> 2. Так что Table1.W01_2018 и Table1.W02_2018 не будутбыть рассмотрены в сумме.

Я не думаю, что этот сложный запрос может быть удовлетворен запросом.Так что я думаю, что единственный путь - это VBA.

enter image description here

1 Ответ

0 голосов
/ 23 октября 2018

Если вы хотите избежать VBA и если полей не более 50 Wxx, UNION может переставить поля.Должно быть поле уникального идентификатора - будет использоваться автономный номер.Так как я подозреваю, что есть 52 поля Wxx и вам не нужны поля W01_2018 и W02_2018, исключите эти 2.

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.

...