我在为在网格中显示数据而必须构建的 SQL 请求时遇到了一些问题。
我有如下临时表(我在示例中输入了数字而不是电子邮件地址):
GroupID | Email1 | Email2
null | 1 | 2
null | 1 | 2
null | 1 | null
null | 3 | 1
null | 2 | 2
null | 4 | 2
null | 5 | 6
null | 6 | null
我需要更新表以设置 GroupID,如下所述:如果 email1 或 email2 匹配任何其他记录,则该记录需要与另一个记录具有相同的 groupId。例如(使用上表):
GroupID | Email1 | Email2
**1** | 1 | 2
**1** | 1 | 2
**1** | 1 | null
**1** | 3 | 1
**1** | 2 | 2
**1** | 4 | 2
**2** | 5 | 6
**2** | 6 | null
我尝试过这样的事情:
UPDATE a
SET a.GroupId = b.GroupId
FROM #temp a
INNER JOIN (SELECT Email,
ROW_NUMBER() OVER (ORDER BY ISNULL(Email,'zzzzzzzz')) GroupId
FROM (SELECT Email1 Email
FROM #temp
GROUP BY Email1
UNION ALL
SELECT Email2 Email
FROM #temp
GROUP BY Email2
) c
GROUP BY Email
) b
ON a.Email1 = b.Email OR
a.Email2 = b.Email OR
(b.Email IS NULL AND a.Email1 IS NULL AND a.Email2 IS NULL)
但这不起作用我打算...例如,Email2等于Email 1的情况不被识别为同一组...我怎样才能使这个请求按我的意愿工作?甚至有可能吗?
[编辑] 2013/15/17 14:15:事实上,对于规则,我的意思是“如果 email1 或 email 2 与任何其他记录的 email1 或 email2 匹配,则应该属于相同的 groupID”