我正在尝试合并两个表,每个表都有三列,其中两列很常见。 income
表具有Location
,date
和Amt_recd
,expense
表具有Location
,date
和Amt_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_recd
是null
,另一行是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/