valores de mesclagem e adicionar de duas tabelas
Pergunta
É possível criar uma consulta que acrescenta valores dentro de duas tabelas:
Por exemplo, digamos que você tenha duas tabelas
id value
-- -----
a 1
c 2
d 3
f 4
g 5
e
id value
-- -----
a 1
b 2
c 3
d 4
e 5
Então, quando você 'Adicionar' as duas tabelas que se obtém o resultado em jogo da id. Assim, a = 1 + 1 = 2, e simplesmente o mesmo resultado que eles não fazem. Assim, a consulta retornaria:
id value
-- -----
a 2
b 2
c 5
d 7
e 5
f 4
g 5
Solução
talvez algo como
select coalesce(t1.id, t2.id) as id, (coalesce(t1.value, 0) + coalesce(t2.value, 0)) as value
from table1 t1 full outer join table2 t2 on t1.id = t2.id
Outras dicas
Use:
SELECT x.id,
SUM(x.value)
FROM (SELECT t.id,
t.value
FROM TABLE_1 t
UNION ALL
SELECT t2.id,
t2.value
FROM TABLE_2 t2) x
GROUP BY x.id
Você poderia fazê-lo como este - mas as outras respostas são provavelmente mais rápida:
SELECT t1.id, t1.value + t2.value AS value
FROM t1 INNER JOIN t2 ON t1.id = t2.id
UNION
SELECT t1.id, t1.value
FROM t1
WHERE t1.id NOT IN (SELECT t2.id FROM t2)
UNION
SELECT t2.id, t2.value
FROM t2
WHERE t2.id NOT IN (SELECT t1.id FROM t1)
SELECT
COALESCE(t1.id, t2.id) AS id,
COALESCE(t1.value, 0) + COALESCE(t2.value, 0) AS value
FROM
t1
FULL OUTER JOIN
t2 ON t1.id = t2.id
ou
SELECT
foo.id,
COALESCE(t1.value, 0) + COALESCE(t2.value, 0) AS value
FROM
(
SELECT t1.id FROM t1
UNION
SELECT t2.id FROM t2
) foo
LEFT JOIN
t1 ON foo.id = t1.id
LEFT JOIN
t2 ON foo.id = t2.id
SELECT ISNULL(T1.Col1.T2.Col1) as ID, (ISNULL(T1.Col2,0) + ISNULL(T2.Col2,0)) as SumCols
FROM T1 OUTER JOIN T2 ON T1.Col1 = T2.Col2
Sem agrupamento ou qualquer coisa. Ele lida com os seguintes casos
Se um id está em T1, mas não em T2 você receberá o valor em T1 e vice-versa. Este alças inclusão bi-direcional.
Se um ID é tanto que você vai obter a soma
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow