(员工)家庭表如下:
家庭编号 姓名 关系 (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.
这样结果的查询语句该如何写?谢谢!
家庭编号 姓名 关系 (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.
这样结果的查询语句该如何写?谢谢!
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
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 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.家庭编号
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'