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
¿Fue útil?

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
scroll top