如何在SQL中动态选择要加入的列?

时间:2013-02-07 03:28:56

标签: tsql join

假设我在SQL Server(2008)中有以下表:

Person

|PersonID|NickName|FirstName|LastName|
|1       |Jim     |James    |Leahy   |
|2       |Mike    |Michael  |Ross    |
|3       |Bob     |Robert   |Helberg |

我想知道SQL中是否可以使用以下内容。我有一个主表,我想根据NickNameFirstName列在另一个表上找到匹配项。但是,我希望按特定顺序连接列。

我想加入上面的第一列(NickNameFirstName),该列与下表中的标识符相匹配

|Identifier|PersonId|
|Jim       |1       | <- should return PersonId = 1
|Michael   |2       | <- should return PersonId = 2

因此,如果NickName上有匹配项,则选择该行。如果NickName上没有匹配项,请查看FirstName

我是否可以按特定顺序查询NickNameFirstName列?

我不认为COALESCE会起作用,因为我们无法保证任何列都是NULL - 我们只知道列上可能不会发生匹配。< / p>

如果您需要澄清,请告诉我。我可能没有措辞好。

1 个答案:

答案 0 :(得分:1)

由于您没有指定主表的架构,我假设它有Identifier varchar(100)字段,可以包含nicknamefirstname。在这种情况下,query应如下所示:

select m.identifier, 
PersonId = isnull(p1.PersonID,p2.PersonID)
from maintable m
left join persons p1 on p1.nickname = m.identifier
left join persons p2 on p2.firstname = m.identifier