我有一个表,其中包含重复的姓名和电子邮件,但具有不同的标识符和其他相关数据。在这种情况下,标识符不必必须是唯一的。以下是数据示例:
课程 | 用户代码 | 名字 | 姓氏 | 电子邮件地址 |
---|---|---|---|---|
经济 | SKNKZ62HR28 | 约翰 | 能源部 | john.doe@gmail.com |
语言 | C6NV4LQS5D4 | 约翰 | 能源部 | john.doe@gmail.com |
科学 | H9NNVNWVPM9 | 弗雷德 | 能源部 | fred.doe@gmail.com |
政府 | JVNH2BVTD3V | 简 | 能源部 | jane.doe@gmail.com |
数学 | L2NK8S49N5G | 简 | 能源部 | jane.doe@gmail.com |
我需要做的是更新 user_code
以便 John Doe 为两个课程使用相同的 user_code
:
课程 | 用户代码 | 名字 | 姓氏 | 电子邮件地址 |
---|---|---|---|---|
经济 | SKNKZ62HR28 | 约翰 | 能源部 | john.doe@gmail.com |
语言 | SKNKZ62HR28 | 约翰 | 能源部 | john.doe@gmail.com |
科学 | H9NNVNWVPM9 | 弗雷德 | 能源部 | fred.doe@gmail.com |
政府 | L2NK8S49N5G | 简 | 能源部 | jane.doe@gmail.com |
数学 | L2NK8S49N5G | 简 | 能源部 | jane.doe@gmail.com |
我已经能够使用此代码识别我的重复项:
SELECT a.*
FROM attendees a
JOIN
(SELECT [Email Address], [Last Name], [First Name], COUNT(*) AS number
FROM attendees
GROUP BY [Email Address], [Last Name], [First Name]
HAVING count(*) > 1) b ON a.[Email Address] = b.[Email Address]
AND a.[Last Name] = b.[Last Name]
AND a.[First Name] = b.[First Name]
ORDER BY a.[Email Address]
我不确定接下来的步骤。
答案 0 :(得分:1)
如果只想查询返回结果集,可以使用:
select a.*,
max(user_code) over (partition by firstname, lastname, emailaddress) as imputed_user_code
from attendees a;
进行更新的最佳方式取决于数据库。方括号表示 SQL Server,它具有可更新的 CTE。这允许:
with toupdate as (
select a.*,
max(user_code) over (partition by firstname, lastname, emailaddress) as imputed_user_code
from attendees a
)
update toupdate
set user_code = imputed_user_code
where user_code <> imputed_user_code;