我觉得这有一个非常简单的解决方案,我只是脑筋冻结,但我希望你能帮忙。
我有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
这看起来如此简单明了,但我无法做到正确,并且非常感谢帮助。
答案 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