Как создать вычисляемый столбец в доступе, основанный на условной сумме другой таблицы - PullRequest
0 голосов
/ 12 марта 2020

В MS ACCESS 2016 можно создать столбец в таблице, который является условной суммой другой таблицы?

Пример

Таблица 1 - Столбцы

ID, NAME, TOTAL

Таблица 2 - Столбцы

ID, NAME, IDREF, CUSTO

Данные:

Таблица 1

ID | Name  | Total
---+-------+----------------------------------------------------------------
35 |  Test |  "SUM(CUSTO) of ALL ELEMENTS OF TABLE 2 WHERE table2.IDREF = table1.ID"

Таблица 2

ID | Name  | IDREF | CUSTO
---+-------+-------+--------
1  | Test  |  35   |   50
2  | Test  |  35   |   30
3  | abcd  |  12   |   30
4  | Test  |  35   |   10

Результат должен быть следующим:

Таблица 1

ID | Name | Total
---+------+------
35 | Test |  90      (50 + 30 + 10 from table 2 where idref = 35)

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

Вы можете использовать подзапрос:

select t1.*,
       (select sum(t2.CUSTO)
        from table2 as t2
        where t2.idref = t1.id
       ) as total
from table1 as t1;
1 голос
/ 23 марта 2020

Более эффективно, рассмотрите совокупный подзапрос в JOIN для запуска только один раз , а не SELECT подзапрос, который выполняется для каждой строки.

SELECT t1.*, agg.Total
FROM table1 as t1
INNER JOIN
   ( SELECT t2.idref, SUM(t2.CUSTO) AS Total
     FROM table2 as t2
     GROUP BY t2.idref
   ) AS agg
ON agg.idref = t1.id

В качестве альтернативы замените подзапрос точным сохраненным запросом для еще большей эффективности в соответствии с советами Аллена Брауна по оптимизации запросов в MS Access :

Подзапрос будет значительно быстрее, чем функция агрегирования домена. В большинстве случаев составленный запрос будет работать быстрее (т. Е. Еще один сохраненный запрос, который вы включите в этот запрос в качестве «таблицы»).

SELECT t1.*, q.Total
FROM table1 as t1
INNER JOIN mySavedAggQuery q
ON q.idref = t1.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...