我想加入t1到t2,但问题是我想将varchar加入int。 假设他们有一个名为jobType的列,表1的值看起来像
1
2
3
4
和表2 jobType列看起来像
a
b
c
d
其中1对应于a,2对应于b等。
基本上我希望能够加入工作类型并定义如果' a'然后1和 ' B'然后是2等等。
下面是一些不正确的语法,但也许它得到了我的观点,或者可能只是让情况更加混乱......
select * from table1 t1
JOIN table2 t2
on case
when jobtype = 'a' then 1
when jobtype = 'b' then 2
when jobtype = 'c' then 3
when jobtype = 'd' then 4
end as jobtype
t1.jobtype = t2.jobtype
我确定此问题已经解决过,但我不知道这是什么,所以google搜索是无用的。
编辑:这是提供其中一个答案的表格。当我运行这个时,我转换varchar值时转换失败' a'数据类型int'。关于如何在不同数据类型之间进行连接的任何想法?
create table t1
(id int identity(1,1),
jobtype int,
primary key (id)
)
insert into t1 (jobtype) values (1)
insert into t1 (jobtype) values (2)
insert into t1 (jobtype) values (3)
insert into t1 (jobtype) values (4)
create table t2
(id int identity(1,1),
jobtype varchar(1),
primary key (id)
)
insert into t2 (jobtype) values ('a')
insert into t2 (jobtype) values ('b')
insert into t2 (jobtype) values ('c')
insert into t2 (jobtype) values ('d')
select *
from t1
JOIN t2
on case t1.jobtype
when 'a' then 1
when 'b' then 2
when 'c' then 3
when 'd' then 4
end = t2.jobtype
答案 0 :(得分:2)
虽然我完全赞同戈登关于修复你的数据,或者甚至可能是你在那里拥有它的结构。只是语法错误。请意识到这不会表现得很好或能够很好地扩展。
select *
from table1 t1
JOIN table2 t2
on case t1.jobtype
when 'a' then 1
when 'b' then 2
when 'c' then 3
when 'd' then 4
end = t2.jobtype
- 编辑 -
根本没什么大不了的。感谢您发布ddl和示例数据。你只需要在这里反转case表达式。
select *
from table1 t1
JOIN table2 t2
on case t1.jobtype
when 1 then 'a'
when 2 then 'b'
when 3 then 'c'
when 4 then 'd'
end = t2.jobtype