VBA SQL: обновление записи на основе количества записей
У меня есть две разные таблицы, и я хочу обновить одну из них на основе нескольких условий. Мои столы:
Таблица1
--------------------------- ID | N1 | N2 --------------------------- 1 22 12 1 5 0 1 87 12 2 67 0 2 6 0 2 3 0 2 60 12 3 55 0 3 64 12 4 8 0 4 75 12 4 4 0 5 58 12 5 69 12 5 36 12 5 3 0Таблица2
-------------------------- ID | MX | RN -------------------------- 1 33 2 2 45 3 3 99 4 4 67 2 5 87 4
Я хочу вычислить только те, у которых один N2 = 0 в таблице 1, используя формулу
Н2= х-У1-РН
Так, например, когда ID=1 существует только один 0, поэтому мы суммируем все N1, которые не являются 0
N2=33-(87+22)-2 = -78
и то же самое в ID=3 и =5
N2=99-(64)-4 = 31
N2=87-(58+69+36)-4 = -80
Затем N2 этого идентификатора будет обновлен новой записью. ID=2 будет проигнорирован, потому что есть три записи = 0, и поэтому для ID=4 есть две записи =0.
Обновленной таблицей будет Таблица 1
--------------------------- ID | N1 | N2 --------------------------- 1 22 12 1 5 -78 1 87 12 2 67 0 2 6 0 2 3 0 2 60 12 3 55 31 3 64 12 4 8 0 4 75 12 4 4 0 5 58 12 5 69 12 5 36 12 5 3 -80
Что я уже пробовал:
Поэтому я хотел сделать это с помощью sql-запроса, но не знал, как правильно его выполнить.
Код, который я сделал, выглядит следующим образом:
SQL-запрос:
UPDATE TABLE1 AS I INNER JOIN TABLE2 AS P ON I.ID = P.ID SET I.N2 = IIF(I.N2 = -0, (P.MX - SUM(DMax("N2 ", "TABLE1 ", "ID=" & I.ID)) - P.RN), I.N2 ) WHERE I.[ID] IN (SELECT B.[ID] FROM TABLE1 B GROUP BY B.[ID] HAVING (Count(B.[ID]) > 1) AND (Min(B.N2 ) <> Max(B.N2 )) AND (Min(B.N2 ) = 0 OR Max(B.N2 ) = 0)) AND I.N2 IN (0);
код VBA:
Private Sub GET_CAL() DoCmd.SetWarnings False DoCmd.OpenQuery "Query1" DoCmd.SetWarnings True End Sub
RedDk
Какие сообщения об ошибках вы испытываете? Обновление выглядит не так, как есть ... вы найдете в BOL, что обновление обычно относится к столбцу ... здесь, как положение, несомненно, вызовут "неправильный синтаксис около ключевого слова 'как'" ...