Frage

Ist es möglich, eine Abfrage zu fertigen, die Werte innerhalb von zwei Tabellen ergänzt:

Zum Beispiel, sagen, Sie haben zwei Tabellen

id    value
--    -----
a       1
c       2
d       3
f       4
g       5

und

id     value
--     -----
a        1
b        2
c        3
d        4
e        5

Wenn Sie dann auf ‚Hinzufügen‘, die beiden Tabellen, die Sie würden das Ergebnis erhalten, wo die Übereinstimmung der ID. Also, a = 1 + 1 = 2, und einfach das gleiche Ergebnis, wenn sie es nicht tun. Also die Abfrage zurückkehren würde:

id     value
--     -----
a       2
b       2
c       5
d       7
e       5
f       4
g       5
War es hilfreich?

Lösung

vielleicht so etwas wie

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

Andere Tipps

Verwendung:

  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

Man könnte es so machen - aber die anderen Antworten sind wahrscheinlich schneller:

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

oder

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

Keine Gruppierung oder sonst etwas. Es behandelt die folgenden Fälle

, wenn eine ID in T1 ist aber nicht in T2 wird der Wert in T1 und umgekehrt erhalten. Diese Griffe bidirektionale Integration.

Wenn eine ID in beiden ist, werden Sie die Summe bekommen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top