是否有可能制作一个查询两个表内增加值:

举例来说,假设有两个表

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

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

然后,当您“添加”两个表,你会得到的结果,其中ID的比赛。因此,A = 1 + 1 = 2,而只是相同的结果,他们不知道。所以查询将返回:

id     value
--     -----
a       2
b       2
c       5
d       7
e       5
f       4
g       5
有帮助吗?

解决方案

可能像

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

其他提示

使用:

  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

您可以不喜欢这样 - 但其他的答案很可能更快:

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

OR

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

没有分组或任何东西。它处理以下情况

如果一个id是在T1但不是在T2,你会得到在T1和反之亦然的值。这个处理双向的包含。

如果一个ID是在两个你会得到一个总和

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top