在SQL Query中映射两个不同的列

时间:2013-04-03 15:55:52

标签: sql-server join left-join

嗨,不知道有人可以帮我解决这个问题。我有一个数据集,其中我有两列。 A栏/ B栏;我们称之为Table UpdateData。

还有两个具有常设数据的Access表,这些表是这些代码的映射表。一个表是更新前代码(oldCodes),另一个是系统后更新代码(NewCode)。在我的数据集中,列A具有更新前代码,列B具有更新后代码。我的想法是将这两个Access表新旧代码组合到SQL Server(2005)中的一个表中,如下所示To Create Table combinedCodes:

Oldcode    display 
=====     =======
RTYX45    No
GHYUN6    No
BYUER5    Yes

Newcode    display 
=====      =======
VUJNG6     Yes
LERWS8     No
XCRYU7     Yes

code      display 
=====     =======
RTYX45    No
GHYUN6    No
BYUER5    Yes
VUJNG6    Yes
LERWS8    No
XCRYU7    Yes

请注意,这只是一个数据示例,行数远多于显示的数据。

因此,如果我加入updateData和Combined代码,我该如何设置它,以便一个字段(显示)可以显示来自A / B列(或不是)的匹配。当我只加入一列时,让我们说左边的列A连接到来自combinedCodes表的updateData表,我在combinedCodes显示字段中获得了正确的数据,而对于那些不匹配的数据,则为空。

但后来我从Column B引入了另一个连接,使用左连接到CombinedCodes的UpdateData表,并且combinedCodes显示显示旧代码,其中在null之前,我想要的,但也显示旧代码,在使用新代码之前。我对实际发生的事情感到有些混淆,所以这可能不是100%正确但是当将每个查询结果与单个连接进行比较时,查询结果与列A和列B的连接是不同的,尽管添加时数据的数量相同从单独的查询中提取个人数量。

select c.Fields
--,f.Display
,pt.Display
 from UpdateData c 
INNER JOIN PRE_CODES pt
ON c.columnA = pt.code -- only for pre-codes
--INNER JOIN POST_CODES f
--ON c.columnB = f.code

注释掉的连接和字段用于后置代码,另一个用于预编码。如果我包含左外连接以显示后代码的空值然后引入第二连接和f.display加左连接为字段它不会显示相同的结果,就好像我单独运行每个并组合它们。

这种联接超出了我对连接的理解,我不知道我应该在这做什么,所以对任何可以帮助我的人来说

由于

安德鲁

1 个答案:

答案 0 :(得分:1)

如果我理解你要做什么,我可以看到几个选项。

一种是编写两个查询,每个代码表一个(在每种情况下都有内连接,因此你没有任何空值),然后使用UNION来组合结果并生成数据组合表。

另一种是使用左外连接编写连接到每个表的单个查询,这将导致一个列对一个表具有值或null,而另一个列具有值或者另一个表为null。然后在使用COALESCE的结果中添加另一列,将这两列合并为一个非空列。