Создать запрос (сумма из разных таблиц) - PullRequest
0 голосов
/ 27 мая 2019

У меня есть 3 таблицы, и я хочу суммировать значение:

Table 1  
id............value  
31001.........200  
31002.........100  
31003.........1  
31004.........0  
31005.........0  


Table 2  
id...........value  
31001.........1  
31002.........1  
31004.........5  

Table 3  
id...........value  
31001.........2  
31003.........2  
31005.........1

Я пытался использовать следующий код:

SELECT table1.id, Sum([table1].[Value]+[table2].[Value]+[table3].[Value])
FROM (table1 LEFT JOIN table2 ON table1.[id] = table2.[id]) LEFT JOIN table3 ON table1.[id] = table3.[id]
WHERE (((table2.id) Is not Null) and (table3.id) and (table2.id))
GROUP BY table1.id;

UNION

SELECT table1.id,Sum([table1].[Value]+[table2].[Value])
FROM table1 LEFT JOIN table2 ON table1.[id] = table2.[id]
WHERE (((table2.id) Is not Null))
GROUP BY table1.id;

UNION

SELECT table1.id,Sum([table1].[Value]+[table3].[Value])
FROM table1 LEFT JOIN table3 ON table1.[id] = table3.[id]
WHERE (((table3.id) Is not Null))
GROUP BY table1.id;

Я хочу получить результат как:

id.........value  
31001.......223  
31002.......111  
31003.........3  
31004.........5  
31005.........1

Но я получаю

id..........value  
31001.......221  
31001.......222  
31001.......223  
31002.......111  
31003.........3  
31004.........5  
31005.........1

Как я могу это исправить?

1 Ответ

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

Сначала используйте UNION ALL для всех 3 таблиц, а затем суммируйте по столбцу value на id:

select id, sum(value) as totalvalue from (
  select id, value from table1
  union all
  select id, value from table2
  union all
  select id, value from table3
)
group by id
order by id

Результат будет:

id  totalvalue
31001   203
31002   101
31003   3
31004   5
31005   1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...