Member 13329521 Ответов: 1

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, что обновление обычно относится к столбцу ... здесь, как положение, несомненно, вызовут "неправильный синтаксис около ключевого слова 'как'" ...

1 Ответов

Рейтинг:
2

nane aa

with temp as (
select a.ID, (select MX - sum(N1) - RN from #table2 where id=a.ID) as N2NewValue
from #table1 as a
where a.N2<>0  and a.ID in(select id from #table1 where N2=0 group by N2,ID having count(ID)=1)
group by a.ID)
update #table1 set N2=b.N2NewValue
from #table1 as a, temp as b
where a.ID=b.ID and a.N2=0


проверьте этот запрос


RedDk

- Ух ты!

"Моя пятерка" (как говорится)