34,838
社区成员




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'
--将其分解为三个独立的表,员工表,配偶表,子女表,再用左连接
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.家庭编号
--> 测试数据: #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
*/
写错了,多了一个,
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
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