源 目标
组号 成员 组号 成员
1061 C1 1061 C1
1061 C2 1061 C2
1061 C3 1061 C3
1062 C1 1061 C1
1062 C4 1061 C4
1062 C3 1061 C3
1063 C1 1061 C1
1063 C3 1061 C3
1064 C4 1061 C4
1064 C5 1061 C5
1065 C5 1061 C5
1065 C6 1061 C6
2001 C7 2001 C7
2001 C8 2001 C8
2001 C9 2001 C9
2002 C10 2001 C10
2002 C9 2001 C9
3001 C11 3001 C11
3001 C12 3001 C12
你的这个问题有点看不懂,可不可以理解为找出每个成员所在的组?还有你的原数据和目标数据怎么都是一样的?
select t.num as '成员',GROUP_CONCAT(t.gp ) as '所在组' from t_group_number t group by t.num
/*以下是运行结果,不知道是不是你想要的*/
成员 所在组
C1 1061,1062,1063
C10 2002
C11 3001
C12 3001
C2 1061
C3 1062,1063,1061
C4 1064,1062
C5 1064,1065
C6 1065
C7 2001
C8 2001
C9 2001,2002
你这个有点类似于遗传病分析,也就是树形扩展,一个sql很难搞定,需要写过程。
把2个表的数据写入到2个字段相同的表,然后 union 一下就自动合并了
create table #a(zh int,cy varchar(10),newzh varchar(10))
insert into #a (zh,cy,newzh) values(1061,'C1','')
insert into #a (zh,cy,newzh) values(1061,'C2','')
insert into #a (zh,cy,newzh) values(1061,'C3','')
insert into #a (zh,cy,newzh) values(1062,'C1','')
insert into #a (zh,cy,newzh) values(1062,'C4','')
insert into #a (zh,cy,newzh) values(1062,'C3','')
insert into #a (zh,cy,newzh) values(1063,'C1','')
insert into #a (zh,cy,newzh) values(1063,'C3','')
insert into #a (zh,cy,newzh) values(1064,'C4','')
insert into #a (zh,cy,newzh) values(1064,'C5','')
insert into #a (zh,cy,newzh) values(1065,'C5','')
insert into #a (zh,cy,newzh) values(1065,'C6','')
insert into #a (zh,cy,newzh) values(2001,'C7','')
insert into #a (zh,cy,newzh) values(2001,'C8','')
insert into #a (zh,cy,newzh) values(2001,'C9','')
insert into #a (zh,cy,newzh) values(2002,'C10','')
insert into #a (zh,cy,newzh) values(2002,'C9','')
insert into #a (zh,cy,newzh) values(3001,'C11','')
insert into #a (zh,cy,newzh) values(3001,'C12','')
SELECT cy,min(zh) as minzh
into #b
from #a
group by cy
having count(zh)>=2
--循环
DECLARE @minzh INT,@cy varchar(10)
DECLARE cursor_a CURSOR FOR
SELECT minzh,cy FROM #b
OPEN cursor_a
FETCH NEXT FROM cursor_a INTO @minzh,@cy
WHILE @@FETCH_STATUS=0
BEGIN
update #a set newzh=@minzh where zh in (select zh from #a where cy=@cy) and newzh=''
FETCH NEXT FROM cursor_a INTO @minzh,@cy
END
CLOSE cursor_a
DEALLOCATE cursor_a;
--循环完成后如果 newzh 还为空,则取原 zh 填充
update #a set newzh=zh where newzh=''
--查看结果
select * from #a