首页 > 解决方案 > 在一条记录中结合 2 个不同的属性来查找一个集合

问题描述

我有一个包含以下列的表,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 通过匹配的语言ID 与recID 4 相关。由于这些都是相关的,因此它们在同一个集合中。RecID5 不涉及任何其他记录,因此它在自己的集合中。

标签: sql

解决方案


我想你想要这样的东西:

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不同组的此版本。


推荐阅读