创建如下脚本:
create table GTBALE(C1 Varchar(20),C2 Varchar(20),G Int )
Insert Into GTBALE ValueS(001,'P1',Null)
Insert Into GTBALE ValueS(001,'P2',Null)
Insert Into GTBALE ValueS(002,'P2',Null)
Insert Into GTBALE ValueS(002,'P3',Null)
Insert Into GTBALE ValueS(003,'P4',Null)
Insert Into GTBALE ValueS(004,'P5',Null)
Insert Into GTBALE ValueS(005,'P1',Null)
对如下的结果集进行分组,分组规则比较BT,有点递归分组的味道
Select * From GTBALE
行号:C1 C2 G
1 1 P1 null
2 1 P2 null
3 2 P2 null
4 2 P3 null
5 3 P4 null
6 P4 null
7 3 null
8 4 P5 null
9 5 P1 null
我需要的分组后的结果如下,G 为组号,
行号 C1 C2 G
1 1 P1 1
2 1 P2 1
3 2 P2 1
4 2 P3 1
5 3 P4 2
6 P4 2
7 3 2
8 4 P5 3
9 5 P1 1
规则就是只要有相互交错到的C1 C2,都属于同一个组,也就是说,C1,C2中只要有一个值满足某个组里的已经存在的值,该行就属于那个组
比如:C1列中两个列值1,1跟C2中的P1,P2对应,而C2中的两个列值P2,又跟C1中的列值1,2对应,所以第一,二,三行属于同一个组,而P3对应的C1值2又是组中的值,所以P3对应的行也属于组1,
第5行中的3,P4 两个值在组1中都不存在,所以他是独立的,开始一个新的组2
第6行中的P4 跟第5行中的P4一样,所以他们属于同一组2,
第7行中的3 跟第5行中的3一样,所以他们属于同一组2,
而第8行中的P5 ,在前面的组中都不存在,所以他也属于独立的组
第9行中的P1,因为组1中已经存在那个值,所以也也属于组1了