A表
dept |user
01 |106107138
02 |065082098103076
.........B表
ID |user
106 |张三
107 |李四
065 |马六
......A表,是一个部门(dept)与人员(user)对照表,一个部门一条记录。
B表,是人员编号(ID)与人员名字(user)对照表,ID字段值为三位数。
A表user字段的值对应B表中ID。
现在部门(dept)每增加一个人,user字段的值就在原来基础上增加三位
比如说,现在01部门增加一个叫008的人,A表的内容就为
A表
dept |user
01 |106107138008
02 |065082098103076A表user字段的每个ID在B表中都有相对应且唯一的记录。现在请教各位,我如何根据人员名字,查到他是哪个部门的?比如说,如何张三是哪个部门的?这个SQL如何写?
dept |user
01 |106107138
02 |065082098103076
.........B表
ID |user
106 |张三
107 |李四
065 |马六
......A表,是一个部门(dept)与人员(user)对照表,一个部门一条记录。
B表,是人员编号(ID)与人员名字(user)对照表,ID字段值为三位数。
A表user字段的值对应B表中ID。
现在部门(dept)每增加一个人,user字段的值就在原来基础上增加三位
比如说,现在01部门增加一个叫008的人,A表的内容就为
A表
dept |user
01 |106107138008
02 |065082098103076A表user字段的每个ID在B表中都有相对应且唯一的记录。现在请教各位,我如何根据人员名字,查到他是哪个部门的?比如说,如何张三是哪个部门的?这个SQL如何写?
declare @A表 table([dept] nvarchar(2),[user] nvarchar(15))
Insert @A表
select N'01',N'106107138' union all
select N'02',N'065082098103076'
--Select * from @A表declare @B表 table([ID] nvarchar(3),[user] nvarchar(2))
Insert @B表
select N'106',N'张三' union all
select N'107',N'李四' union all
select N'065',N'马六'
--Select * from @B表declare @name nvarchar(10)
set @name ='张三'
select * from @A表
where charindex((select [id] from @B表 where [user] =@name) ,[user])>0
/*
dept user
---- ---------------
01 106107138
*/
charindex(b.id,a.[USER])>0 and len(left(a.[USER],charindex(b.id,a.[USER])-1))%3=0
AND b.[user]='张三'
where charindex('106', user)%3=1
where B.[user]='张三' and charindex(rtrim(B.id), A.[user])%3=1
insert #B表 select '106','张三'
insert #B表 select '107','李四'
insert #B表 select '065','马六'
create table #A表(dept char(2),[user] varchar(200))
insert #A表 select '01','106107138008'
insert #A表 select '02','065082098103076'
----------------------
select a.dept from #B表 b left join #A表 a
on patindex('%'+b.id+'%',a.[user])>0 and (patindex('%'+b.id+'%',a.[user])-1)%3=0 where b.[user]='马六'
charindex(b.id,a.[USER])>0 and len(left(a.[USER],charindex(b.id,a.[USER])-1))%3=0
AND b.[user]='张三'
这个方式比较好 :)
where charindex('106', user)%3=1