Sql server 2008 基于现有值的条件联接

Sql server 2008 基于现有值的条件联接,sql-server-2008,Sql Server 2008,希望获得以下场景的一些输入(使用MSSQLS08)。假设我有一个“用户”表,其中包含“用户”列表、他们的“当前代码”(2位)和一些“工作代码”(3位)。我想将“CurrentCode”字段更新为更精确的3位代码,因此我创建了一个名为“NewCode”的单列代码表 “NewCode”字段与“JobCode”字段直接相关,因此为具有有效“JobCode”的用户更新“CurrentCode”很容易。然而,对于那些没有“JobCode”(是“NA”)的人,我只是将他们当前的2位数代码与“NewCode”

希望获得以下场景的一些输入(使用MSSQLS08)。假设我有一个“用户”表,其中包含“用户”列表、他们的“当前代码”(2位)和一些“工作代码”(3位)。我想将“CurrentCode”字段更新为更精确的3位代码,因此我创建了一个名为“NewCode”的单列代码表

“NewCode”字段与“JobCode”字段直接相关,因此为具有有效“JobCode”的用户更新“CurrentCode”很容易。然而,对于那些没有“JobCode”(是“NA”)的人,我只是将他们当前的2位数代码与“NewCode”表中列表的前2位数进行匹配

我已经能够如下输出,使用2个到“NewCode”表实例的联接(如果存在值,则“已确认”链接到“JobCode”,如果不存在,则“匹配”链接到“CurrentCode”):

我很想看看如何将这两个连接组合到“NewCode”表中,这样它就可以根据“JobCode”字段中是否存在匹配返回一列中的代码。例如:

+------+-------------+---------+---------+
| User | CurrentCode | JobCode | NewCode |
+------+-------------+---------+---------+
| A    |          11 |     111 |     111 |
| B    |          12 |      NA |     120 |
| C    |          23 |     232 |     232 |
| D    |          42 |     423 |     423 |
| E    |          11 |     112 |     112 |
| F    |          21 |      NA |     210 |
| G    |          33 |      NA |     330 |
+------+-------------+---------+---------+

我该如何创建这个到一个表实例的条件联接,或者甚至是可能的?

条件联接是可能的,而在您的示例中,您可以使用SELECT中的
ISNULL()
以一种简单的方式进行

ISNULL([NewCode - Confirmed], [NewCode - Matched]) AS NewCode

谢谢,埃里克,成功了。不过出于兴趣,您将如何构造条件联接来实现这一点?你能用个箱子吗?例如
joinnewcode-on(case when JobCode not null then
。@David_S53我认为这是一个困难的方法,是的,连接条件接受
case
,但是你还需要在selectok中执行
ISNULL()
,谢谢你的解释。刚才让我思考了一下,这就是为什么我错过了更简单的ISNULL()答案的原因。。
ISNULL([NewCode - Confirmed], [NewCode - Matched]) AS NewCode