我有一个包含以下各列的表, 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与其他任何记录均不相关,因此属于其自己的集合。
答案 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
用于不同的组。