我试图合并两个表,每个表有三列,其中两列很常见。 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
为{{ 1}}在另一个。有什么更好的方法来构建它,所以我得到一个更浓缩的结果?我尝试过各种联合而不是工会,但我们还没有能够得到我正在寻找的结果。
答案 0 :(得分:1)
假设(位置,日期)的组合在每个表中都是唯一的,那么说明union
是错误的工作工具,而是查看join
s是正确的。由于您的收入可能没有收入或没有收入的费用,因此full outer join
是有序的:
SELECT i.location, i.date, i.amt_recd, e.amt_spent
FROM income i
FULL OUTER JOIN expense e ON i.location = e.location AND i.date = e.date
答案 1 :(得分:0)
你应该可以很容易地加入这两个表。
select i.location, i.date, i.amt_recd, e.amt_spent
from income i
inner join expense e
on i.location = e.location
and i.date = e.date
答案 2 :(得分:0)
尝试<mvc:resources mapping="/resources/**" location="/resources/" />
表格
JOIN
答案 3 :(得分:0)
我将这个答案基于你原来的帖子:
我想将这两个表组合在一起,因此有一个表有四个 列和任何常见日期合并为一行。
下半部分表明你不仅需要一个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])
这将为每个独特的位置和组合组合提供一行。日期。
如果您确实需要将结果进一步减少到每个日期一行,则需要指定在给定日期有多个位置时要显示的位置的规则。