例: A表: id, a_sn, b_sn, c_sn    
    B表: a_sn, b_sn, a_name, b_name    其中: a_sn 在A表和B表中都是一一对应的, b_sn可以对应多个a_sn, a_name和b_name分别是a_sn和b_sn的名字
          最重要的就是c_sn, 可以是空, 也可以是a_sn或b_sn    假设这就是一个活动的表. a_sn代表班级, b_sn代表是哪个系, c_sn代表活动的组织者 可以是班级, 也可以是系, 如果c_sn为空的话, 就代表这个活动是由本班级组织的, 即取a_sn的值, 如果不为空, 则由其他的班级或系组织.
    现在就是要显示出  活动id, 活动所在班级(即a.name), 活动所有系(即b.name), 活动组织者(即把c_sn转换成对应的名字)    真不知道我有没有说清楚, 求各位大大帮助 

解决方案 »

  1.   

    A表: id    name      a_sn     b_sn       c_sn
          1    打鱼     1010201   1010200    NULL
          2    农家乐   1010301   1010300    1020401
          3    打台球   1020402   1020400    1010200B表:    a_sn        b_sn         a_name        b_name
          1010201     1010200      经管系一班      经管系
          1010202     1010200      经管系二班      经管系
          1010301     1010300      通控系一班      通控系
          1010302     1010300      通控系二班      通控系
          1020401     1020400      数学系一班      数学系
          1020402     1020400      数学系二班      数学系
    不好意思, 还有一点忘记说了, 系别的代码是以0结尾的, 班别代码不以0结尾
      

  2.   

    就是要查询出数据, 把a_sn, b_sn, c_sn都换成对应的名字
    比如说结果就是
       1  打鱼    经管系一班  经管系  经管系一班
       2  农家乐  通控系一班  通控系  数学系一班
       3  打台球  数学系二班  数学系  经管系
      

  3.   

    --A表: id name a_sn b_sn c_sn
    --  1 打鱼 1010201 1010200 NULL
    --  2 农家乐 1010301 1010300 1020401
    --  3 打台球 1020402 1020400 1010200--B表: a_sn b_sn a_name b_name
    --  1010201 1010200 经管系一班 经管系
    --  1010202 1010200 经管系二班 经管系
    --  1010301 1010300 通控系一班 通控系
    --  1010302 1010300 通控系二班 通控系
    --  1020401 1020400 数学系一班 数学系
    --  1020402 1020400 数学系二班 数学系declare @A table (id int, name varchar(50), a_sn varchar(50),b_sn varchar(50), c_sn varchar(50))
    insert into @A values(1, '打鱼', '1010201', '1010200', NULL )
    insert into @A values(2, '农家乐', '1010301', '1010300' ,'1020401')
    insert into @A values(3, '打台球', '1020402', '1020400', '1010200' )declare @B table ( a_sn  varchar(50),  b_sn  varchar(50),a_name varchar(50), b_name varchar(50))
    insert into @B values('1010201' ,'1010200' ,'经管系一班', '经管系' )
    insert into @B values('1010202', '1010200' ,'经管系二班', '经管系' )
    insert into @B values('1010301', '1010300', '通控系一班', '通控系' )
    insert into @B values('1010302', '1010300', '通控系二班', '通控系' )
    insert into @B values('1020401', '1020400' ,'数学系一班', '数学系' )
    insert into @B values('1020402', '1020400' ,'数学系二班', '数学系' )
    --就是要查询出数据, 把a_sn, b_sn, c_sn都换成对应的名字
    --比如说结果就是
    --  1 打鱼   经管系一班 经管系 经管系一班
    --  2 农家乐 通控系一班 通控系 数学系一班
    --  3 打台球 数学系二班 数学系 经管系
     select distinct a.id,a.name,b.a_name ,c.b_name   from  @A a join @B b on a.a_sn=b.a_sn join @B c on a.b_sn=c.b_sn  
     id          name                                               a_name                                             b_name
    ----------- -------------------------------------------------- -------------------------------------------------- --------------------------------------------------
    1           打鱼                                                 经管系一班                                              经管系
    2           农家乐                                                通控系一班                                              通控系
    3           打台球                                                数学系二班                                              数学系(3 行受影响)
      

  4.   


    --> 测试数据:[A表]
    go
    if object_id('[A表]') is not null 
    drop table [A表]
    go
    create table [A表](
    [id] int,
    [name] varchar(6),
    [a_sn] varchar(10),
    [b_sn] varchar(10),
    [c_sn] varchar(10)
    )
    go
    insert [A表]
    select 1,'打鱼','1010201','1010200',null union all
    select 2,'农家乐','1010301','1010300','1020401' union all
    select 3,'打台球','1020402','1020400','1010200'select *from [A表]
    --> 测试数据:[B表]
    go
    if object_id('[B表]') is not null
    drop table [B表]
    go
    create table [B表](
    [a_sn] varchar(10),
    [b_sn] varchar(10),
    [a_name] varchar(10),
    [b_name] varchar(6))
    go
    insert [B表]
    select '1010201','1010200','经管系一班','经管系' union all
    select '1010202','1010200','经管系二班','经管系' union all
    select '1010301','1010300','通控系一班','通控系' union all
    select '1010302','1010300','通控系二班','通控系' union all
    select '1020401','1020400','数学系一班','数学系' union all
    select '1020402','1020400','数学系二班','数学系'
    select distinct [id],[name],d.[a_name],[b_name],e.[a_name] as [c_name]
    from(
    select distinct [id],[name],[a_name],[b_name],
    isnull([c_sn],a.[a_sn]) as [c_sn]
    from [A表]
    left join
    (select [a_sn],[a_name] from [B表])a
    on [A表].a_sn=a.a_sn
    left join
    (select [b_sn],[b_name] from [B表])b
    on [A表].b_sn=b.b_sn)d
    left join( 
    select [a_sn],[a_name] from [B表]
    union all
    select [b_sn],[b_name] from [B表])e
    on d.[c_sn]=e.a_sn
    /*
    id name a_name b_name c_name
    1 打鱼 经管系一班 经管系 经管系一班
    2 农家乐 通控系一班 通控系 数学系一班
    3 打台球 数学系二班 数学系 经管系
    */