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如何写? 

解决方案 »

  1.   

    -->生成测试数据
     
    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
    */
      

  2.   

    select dept FROM a, b where 
    charindex(b.id,a.[USER])>0 and len(left(a.[USER],charindex(b.id,a.[USER])-1))%3=0
    AND b.[user]='张三'
      

  3.   

    select dept from A
    where charindex('106', user)%3=1
      

  4.   

    select dept from A, B
    where B.[user]='张三' and charindex(rtrim(B.id), A.[user])%3=1
      

  5.   

    create table #B表(ID char(3),[user] varchar(10)) 
    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]='马六'
      

  6.   

    select dept FROM a, b where 
    charindex(b.id,a.[USER])>0 and len(left(a.[USER],charindex(b.id,a.[USER])-1))%3=0
    AND b.[user]='张三'
    这个方式比较好 :)
      

  7.   

    select dept from A
    where charindex('106', user)%3=1