合并2个查询的结果,其中连接列可能缺少任一表中的数据

时间:2011-12-22 10:08:55

标签: sql sql-server

我觉得这有一个非常简单的解决方案,我只是脑筋冻结,但我希望你能帮忙。

我有2个表具有相同的布局,但是来自不同系统的数据,我想在查询中将它们组合起来用于报告。但是我通常加入的列可能只有一个或另一个表中的值。

表A

Date       | Sales
-------------------
20/12/2010 | 500
19/12/2010 | 450

表B

Date       | Sales
-------------------
20/12/2010 | 200
18/12/2010 | 70

我希望这些结果集如下:

结果

Date       | Sales A | Sales B
-------------------------------
20/12/2010 | 500     |    200
19/12/2010 | 450     |    NULL
18/12/2010 | NULL    |    70

这看起来如此简单明了,但我无法做到正确,并且非常感谢帮助。

2 个答案:

答案 0 :(得分:6)

Using Outer Joins in SQL Server

  

使用完整外部联接
  要通过在连接的结果中包含不匹配的行来保留不匹配的信息,请使用完整的外连接。 Microsoft®SQLServer™2000提供完整的外部联接运算符FULL OUTER JOIN,其中包括两个表中的所有行,而不管其他表是否具有匹配值。

select
  coalesce(TableA.Date, TableB.Date) as Date,
  TableA.Sales as SalesA,
  TableB.Sales as SalesB
from
  TableA
  full join TableB on TableA.Date = TableB.Date

答案 1 :(得分:0)

您可以使用full outer join来匹配两个表中的查询。然后isnull可以从左侧或右侧选择日期:

select  IsNull(A.Date, B.Date) as Date
,       A.Sales as [Sales A]
,       A.Sales as [Sales B]
from    A
full outer join B
on      A.Date = B.Date

有趣的读物:Coding Horror post on SQL join types