Unisci e aggiungi valori da due tabelle
Domanda
È possibile creare una query che aggiunge valori all'interno di due tabelle:
Ad esempio, supponi di avere due tabelle
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
Quindi quando "aggiungi" le due tabelle otterrai il risultato in cui l'id corrisponde. Quindi, a = 1 + 1 = 2, e semplicemente lo stesso risultato dove non lo fanno. Quindi la query restituirà:
id value
-- -----
a 2
b 2
c 5
d 7
e 5
f 4
g 5
Soluzione
forse qualcosa del genere
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
Altri suggerimenti
Usa:
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
Potresti farlo in questo modo - ma le altre risposte sono probabilmente più veloci:
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
Nessun raggruppamento o altro. Gestisce i seguenti casi
se un ID è in T1 ma non in T2 otterrai il valore in T1 e viceversa. Questo gestisce l'inclusione bidirezionale.
Se un ID è presente in entrambi otterrai la somma
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow