组合记录中的2个不同属性以查找是否有一组

时间:2019-02-04 17:39:02

标签: sql

我有一个包含以下各列的表, RecID,RegionID,LanguageID

我想找到基于RegionID和languageID的集合。我想将它们联系起来的方式有些复杂。也许描述它的最好方法是通过示例。每个集合应包括通过RegionID或LanguageID相关的任何记录。我想创建一个新列SetID,以区分每个RecID所在的集合。

我希望结果集看起来像这样:

RecID, SetID

例如,如果我有一个包含5条记录的表:

RecID, RegionID, LanguageID
1, A, Eng
2, B, Eng
3, B, Spa
4, C, Spa
5, D, Fre

那将代表2套。所需的输出将是:

RecID, SetID
1, 1
2, 1
3, 1
4, 1
5, 2

推理如下。 RecID 1通过匹配的LangID与RecID2相关。 RecID 2通过匹配的regionID与RecID3相关。 RecID 3通过匹配的languageID与recID 4相关。由于所有这些都是相关的,因此它们在同一集合中。 RecID5与其他任何记录均不相关,因此属于其自己的集合。

1 个答案:

答案 0 :(得分:0)

我认为您想要类似的东西:

SELECT t.RecId, (CASE WHEN EXISTS (SELECT 1 
                                   FROM table t1 
                                   WHERE t1.LanguageID = t.LanguageID AND t.RegionID <> t1.RegionID
                                  ) 
                      THEN 1 ELSE 2 
                END) AS SetID
FROM table t;

对于此版本,1用于同一组,2用于不同的组。