我正在尝试合并两个表,每个表都有三列,其中两列很常见。 income表具有LocationdateAmt_recdexpense表具有LocationdateAmt_spent。我要合并这两个表,因此只有一个表具有四列,并且任何常见的日期都被合并为一行。我已经试过了:

select location, date, amt_recd, null as amt_spent
from income

union

select location, date, null as amt_recd, amt_spent
from expense


而且它距我仅一步之遥,因为它不会像日期一样将其合并成一行,所以它有两行,其中amt_recdnull,另一行是amt_spent。有什么更好的方法来构造此结果,以便获得更简洁的结果?我尝试了各种联接而不是联合,但无法获得我想要的结果。

最佳答案

我将此答案基于您原始帖子的这一行:


我要合并这两个表,所以有一个表有四个
列,以及所有常见日期合并为一行。


后半部分建议您不仅需要JOIN,而且还需要聚合。

SELECT
  COALESCE(i.location, e.location) AS Location
, COALESCE(i.[date], e.[date]) AS [date]
, SUM(i.amt_recd) AS amt_recd
, SUM(e.amt_spent) AS amt_spent
FROM income I
FULL OUTER JOIN expense e
  on i.location = e.location
  and i.date = e.date
GROUP BY
  COALESCE(i.location, e.location)
, COALESCE(i.[date], e.[date])


每个位置和日期的唯一组合将为您提供一行。

如果确实需要将结果进一步减少到每个日期一行,则需要指定规则,以在给定日期有多个位置时显示哪个位置的规则。

关于sql - 两张表中的三列到一张表中的四列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30649710/

10-12 17:05