Combinar y agregar valores de dos tablas
Pregunta
¿Es posible crear una consulta que agregue valores dentro de dos tablas:
Por ejemplo, digamos que tiene dos tablas
id value
-- -----
a 1
c 2
d 3
f 4
g 5
y
id value
-- -----
a 1
b 2
c 3
d 4
e 5
Luego, cuando 'agregue' las dos tablas, obtendrá el resultado donde coinciden los id. Entonces, a = 1 + 1 = 2, y simplemente el mismo resultado donde no lo hacen. Entonces la consulta devolvería:
id value
-- -----
a 2
b 2
c 5
d 7
e 5
f 4
g 5
Solución
tal vez algo así 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
Otros consejos
Uso:
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
Podría hacerlo así, pero las otras respuestas probablemente sean más rápidas:
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
O
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
Sin agrupación ni nada. Maneja los siguientes casos
si una identificación está en T1 pero no en T2, obtendrá el valor en T1 y viceversa. Esto maneja la inclusión bidireccional.
Si hay una ID en ambos, obtendrá la suma
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow