Sql server 2008 基于现有值的条件联接
希望获得以下场景的一些输入(使用MSSQLS08)。假设我有一个“用户”表,其中包含“用户”列表、他们的“当前代码”(2位)和一些“工作代码”(3位)。我想将“CurrentCode”字段更新为更精确的3位代码,因此我创建了一个名为“NewCode”的单列代码表 “NewCode”字段与“JobCode”字段直接相关,因此为具有有效“JobCode”的用户更新“CurrentCode”很容易。然而,对于那些没有“JobCode”(是“NA”)的人,我只是将他们当前的2位数代码与“NewCode”表中列表的前2位数进行匹配 我已经能够如下输出,使用2个到“NewCode”表实例的联接(如果存在值,则“已确认”链接到“JobCode”,如果不存在,则“匹配”链接到“CurrentCode”): 我很想看看如何将这两个连接组合到“NewCode”表中,这样它就可以根据“JobCode”字段中是否存在匹配返回一列中的代码。例如:Sql server 2008 基于现有值的条件联接,sql-server-2008,Sql Server 2008,希望获得以下场景的一些输入(使用MSSQLS08)。假设我有一个“用户”表,其中包含“用户”列表、他们的“当前代码”(2位)和一些“工作代码”(3位)。我想将“CurrentCode”字段更新为更精确的3位代码,因此我创建了一个名为“NewCode”的单列代码表 “NewCode”字段与“JobCode”字段直接相关,因此为具有有效“JobCode”的用户更新“CurrentCode”很容易。然而,对于那些没有“JobCode”(是“NA”)的人,我只是将他们当前的2位数代码与“NewCode”
+------+-------------+---------+---------+
| 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