(员工)家庭表如下:
家庭编号   姓名  关系    (00本人,01、02配偶,03、04子女,同一家庭的成员家庭编号一样,比如A/B/C是一个家庭)
0001       A     00
0001       B     02
0001       C     03
0002       D     00
0003       E     00
0003       F     03
0003       G     04
要得出如下的查询结果:
家庭编号   员工名   配偶名   子女名
0001       A        B        C
0002       N/A      N/A      N/A
0003       E        N/A      F
0003       E        N/A      G提示,这里要考虑到员工的如下情况:1单身,2有配偶无子女,3无配偶有子女,4有配偶有子女,5子女可能是多个,比如例子中的员工E.
这样结果的查询语句该如何写?谢谢!

解决方案 »

  1.   


    select distinct,家庭编号, case 关系 when '00'then  姓名 else null end as  员工姓名,
    case  when 关系='01' or  关系= '02' then  姓名 else null end as 配偶名,
    case  when 关系='03' or  关系= '04' then  姓名 else null end as 子女名,
     from tablename
      

  2.   


    写错了,多了一个,
    select distinct 家庭编号, case 关系 when '00'then  姓名 else null end as  员工姓名,
    case  when 关系='01' or  关系= '02' then  姓名 else null end as 配偶名,
    case  when 关系='03' or  关系= '04' then  姓名 else null end as 子女名,
     from tablename
      

  3.   

    --> 测试数据: #T
    if object_id('tempdb.dbo.#T') is not null drop table #T
    create table #T (家庭编号 varchar(10),员工名 varchar(10),关系 varchar(2))
    insert into #T
    select '0001','A','00' union all
    select '0001','B','02' union all
    select '0001','C','03' union all
    select '0002','D','00' union all
    select '0003','E','00' union all
    select '0003','F','03' union all
    select '0003','G','04'select 
    a.家庭编号,
    a.员工名,
    配偶名=isnull(b.员工名, 'N/A'),
    子女名=isnull(c.员工名, 'N/A')
    from #T a
    left join #T b on a.家庭编号=b.家庭编号 and b.关系='02'
    left join #T c on a.家庭编号=c.家庭编号 and c.关系 in ('03','04')
    where a.关系='00'
    /*
    家庭编号   员工名     配偶名     子女名
    ---------- ---------- ---------- ----------
    0001       A          B          C
    0002       D          N/A        N/A
    0003       E          N/A        F
    0003       E          N/A        G
    */
      

  4.   


    --将其分解为三个独立的表,员工表,配偶表,子女表,再用左连接select a.家庭编号,a.姓名 员工名,b.姓名 配偶名,c.姓名 子女名 
    from 家庭表 a left join 家庭表 b on a.关系='00' and b.关系 in ('01','02') and a.家庭编号=b.家庭编号
          left join 家庭表 c on c.关系 in ('03','04') and a.家庭编号=c.家庭编号
      

  5.   

    select 
        a.家庭编号,
        a.员工名,
        配偶名=isnull(b.员工名, 'N/A'),
        子女名=isnull(c.员工名, 'N/A')
    from #T a
        left join #T b on a.家庭编号=b.家庭编号 and b.关系 in ('01','02')
        left join #T c on a.家庭编号=c.家庭编号 and c.关系 in ('03','04')
    where a.关系='00'