SQL Запрос на получение соединения между двумя таблицами с несколькими условными SUM () в MS Access - PullRequest
0 голосов
/ 30 апреля 2020

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

Пример:

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

ID , ИМЯ, ИТОГО

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

ID, ИМЯ, IDREF, ROOTID, CUSTO

Данные:

Таблица 1

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

Таблица 2

ID | Name  | IDREF | CUSTO | ROOTID   |
---+-------+-------+-------+----------+
1  | Test  |  35   |   50  |   0      |
2  | Test  |  35   |   30  |   0      |
3  | ALFA  |  12   |   30  |   0      |
4  | BETA  |  17   |   10  |   35     |

Результат должен быть:

Таблица 1

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

Это очень похоже на один из моих предыдущих вопросов, но я думаю, что многокондиционную сумму очень сложно сделать в ms-access, нужна помощь.

спасибо.

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Вы можете использовать внутреннее соединение с несколькими условиями включения, как показано ниже,

SELECT 
    t1.ID,
    t1.Name,
    SUM(t2.CUSTID) AS Total
FROM 
    t2 
    INNER JOIN 
    t1 
ON 
    t2.IDREF = t1.ID
    OR
    t2.ROOTID =t1.ID
GROUP BY
    t1.ID,
    t1.NAME

Выход:

ID  Name    Total
35  Test    90
1 голос
/ 30 апреля 2020

Вы можете использовать пару подзапросов, чтобы получить общую сумму для каждого и сложить их вместе:

SELECT T1.ID, 
NZ((SELECT SUM(T2.Custo) FROM Table2 AS T2 WHERE T1.ID=T2.IDRef),0) +
NZ((SELECT SUM(T2A.Custo) FROM Table2 AS T2A WHERE T1.ID=T2A.RootID) ,0) AS Total
FROM Table1 AS T1;

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...