匹配“集群”

时间:2019-09-03 10:31:48

标签: tsql

我有一个非常具体的问题,我找不到答案,如果可能的话,我宁愿避免使用光标。我认为最好在一个示例中进行解释。

我想实现这一目标:

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')

谢谢您的帮助!

0 个答案:

没有答案