Как посчитать конкретные значения из другой таблицы с помощью запроса на обновление в ms-access? - PullRequest
0 голосов
/ 17 мая 2019

Я использую ms-доступ, и у меня есть две таблицы, подобные этой:

tbl1: contract

| c_ssn | m_ssn | termination |
===============================
|   1   |   1   |      Y      |
|   2   |   2   |      N      |
|   3   |   1   |      Y      |

tbl2: member

| m_ssn | count |
=================
|   1   |       |
|   2   |       |

Я хочу посчитать количество строк в [контракте], для которого значение [завершения] равно "Y""сгруппированы по [m_ssn].Таким образом, желаемый результат будет выглядеть следующим образом:

tbl2: member

| m_ssn | count |
=================
|   1   |   2   |
|   2   |   0   |

Чтобы сделать это, я попробовал этот код SQL:

update member
set count =
(select count(*) from contract
where contract.m_ssn = member.m_ssn & contract.termination = "Y")

Но этот код делает ошибку: «Операция должна бытьобновляемый запрос. "Как я могу решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 17 мая 2019

Попробуйте использовать условное агрегирование:

SELECT
    m.m_ssn,
    SUM(IIF(c.termination = 'Y', 1, 0)) AS count
FROM member m
LEFT JOIN contract c
    ON m.m_ssn = c.m_ssn
GROUP BY
    m.m_ssn;

Обратите внимание, что я не рекомендую выполнять обновление, потому что каждый раз, когда изменяются данные в таблице contract, вам придется выполнять обновление снова. IMO делает обновление только в том случае, если это одноразовое событие.

0 голосов
/ 17 мая 2019

Это наиболее распространенный способ обновления нескольких таблиц в Access.

UPDATE member AS A
INNNER JOIN contract AS B ON A.m_ssn = B.m_ssn 
SET A.count = Count(B.termination)
WHERE B.termination = "Y"
0 голосов
/ 17 мая 2019

Вы используете конкатенацию строк там, где хотите логическое значение AND:

update member
set count = (select count(*)
             from contract
             where contract.m_ssn = member.m_ssn and
                   contract.termination = "Y"
            );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...