两个表中的三列到一个表中的四列

时间:2015-06-04 16:49:25

标签: sql sql-server select join union

我试图合并两个表,每个表有三列,其中两列很常见。 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_recdnullamt_spent为{{ 1}}在另一个。有什么更好的方法来构建它,所以我得到一个更浓缩的结果?我尝试过各种联合而不是工会,但我们还没有能够得到我正在寻找的结果。

4 个答案:

答案 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]) 

这将为每个独特的位置和组合组合提供一行。日期。

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