是否有可能以一种只需要匹配其中一列的方式在 SQL 表中跨多个列查找重复项?
例如,假设我有一个包含以下架构的表: 身份证、C1、C2
我的目标是返回一个新表,其中包含一个名为“组 ID”的列,该列是记录所在组的 ID。如果 C1 或 C2 中至少有一个匹配,则给定记录应该存在于组中。
例如,考虑这张表
创建表#Target
(ID Varchar(MAX),C1 Varchar(MAX),C2 Varchar(MAX))
插入#Target
价值观
('1','p1','e1'), ('2','p2','e2'), ('3','p1','e2'), ('4','p3','e3'), ('5','p3','e4'), ('6','p4','e4')
ID | C1 | C2 |
---|---|---|
1 | p1 | e1 |
2 | p2 | e2 |
3 | p1 | e2 |
4 | p3 | e3 |
5 | p3 | e4 |
6 | p4 | e4 |
所需的输出看起来像
ID | C1 | C2 | GID |
---|---|---|---|
1 | p1 | e1 | G1 |
2 | p2 | e2 | G1 |
3 | p1 | e2 | G1 |
4 | p3 | e3 | G2 |
5 | p3 | e4 | G2 |
6 | p4 | e4 | G2 |
在尝试提出解决方案时,我尝试像这样按每一列单独分组:
#1 按 C1 分组并为每个组分配唯一 ID (C1GID)
#2 按 C2 分组并为每个组分配唯一 ID (C2GID)
现在我遇到的问题是如何按 C1GID 或 C2GID 分组。我不知道如何对至少共享这些列值之一的行进行分组。