我有一个非常具体的问题,我找不到答案,如果可能的话,我宁愿避免使用光标。我认为最好在一个示例中进行解释。
我想实现这一目标:
GUID |SourceID |CRMID |Name |Cluster_SourceID |Cluster_CRMID |Cluster_Name
unique1 |123 |x-1 |NmA |1 |1 |1
unique2 |123 | |NmB |1 |1 |1
unique3 |124 | |NmC |2 |2 |2
unique4 |125 |y-3 |NmD |3 |3 |1
unique5 |126 |x-1 |NmA |4 |1 |1
unique6 |126 | |NmD |4 |1 |1
unique7 |127 |z-8 |NmC |5 |5 |2
其中给出了GUID,SourceID,CRMID和Name列,我需要计算Cluster列。
如果SourceID或CRMID或Name上存在匹配项,我将尝试构建匹配项集群。因此,如果SourceID中的值相同,则它们属于某个群集(Clouster_SourceID)。但是,下一步是扩展匹配,因为您会看到CRMID列中的值x-1在2 Cluster_SourceID中。因此,我将2 Cluster_SourceID合并到一个群集(Cluster_CRMID)。下一步基于名称列。因此,如果至少其中一个名称相同,我将使用同一集群中的所有名称,并尝试查找匹配的其他集群。
以下是重现该表的代码:
create table #temp(GUID char(36) default NEWID(), SourceID int, CRMID varchar(10), Name varchar(10), Cluster_SourceID int, Cluster_CRMID int, Cluster_Name int)
insert into #temp(SourceID, CRMID, Name)
values(123,'x-1', 'NmA'),
(123, NULL, 'NmB'),
(124, NULL, 'NmC'),
(125, 'y-3', 'NmD'),
(126, 'x-1', 'NmA'),
(126, NULL, 'NmD'),
(127, 'z-8', 'NmC')
谢谢您的帮助!