我有以下数据,包含多个帐户之间的所有链接。
Col1 Col2
----------
A B
A C
B C
D E
F G
G H
I A
J I
我想为所有链接帐户创建通用ID。在上面的例子中,A,B,C,I,J被链接。所以他们应该得到相同的ID。
我的最终数据应该与下面的内容类似。
**ID Parent_ID**
----------
A 1
B 1
C 1
D 2
E 2
F 3
G 3
H 3
I 1
J 1
任何人都可以帮助我。提前谢谢。
答案 0 :(得分:0)
可能有更优雅的解决方案,但我发现了这一点(没有cursor
)。 @tbl
是可变的,因此需要此变量。
declare @tbl table(id int identity(1,1), col1 char,col2 char)
insert @tbl values
('A', 'B'),
('A', 'C'),
('B', 'C'),
('D', 'E'),
('F', 'G'),
('G', 'H'),
('I', 'A'),
('J', 'I')
declare @c1 char, @c2 char, @par int=1, @rowcnt int,@id int, @tmpPar int
--target table
declare @groups table(col char,parent_id int)
--setup vars
select top 1 @c1=col1,@c2=col2, @id=id from @tbl order by id
--insert 2 rows into groups
insert @groups values(@c1,@par),(@c2,@par)
--remove processed row
delete @tbl where id=@id
set @rowcnt=@@ROWCOUNT
--do remaining in a cicle
while @rowcnt>0
begin
select top 1 @c1=col1,@c2=col2, @id=id from @tbl order by id
select @tmpPar=parent_id from @groups where col =@c1 or col= @c2
--
if @tmpPar is null
select @tmpPar=@par+1,@par=@par+1--new group
--add new rows
insert @groups values(@c1,@tmpPar),(@c2,@tmpPar)
delete @tbl where id=@id
set @rowcnt=@@ROWCOUNT
set @tmpPar=null --reset var
end
--final result
select distinct * from @groups