У меня есть 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
Как я могу это исправить?
Почему 31001.......223
? Сумма 200 + 1 + 2 = 203.
@forpas упс, опечатка. 200 должно быть 220.
Это имеет смысл. Вы пробовали мой ответ?
Сначала используйте 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
Сделайте UNION ALL вместо UNION. ГРУППА ОБЪЕДИНЕНИЕМ ВСЕХ РЕЗУЛЬТАТОВ.