我的表格中包含FirstName
,Middle_Initial
,Last_Name
,Date_of_Birth
,MemberID
和ID
列,可能有很多“口味” “ 至
目前该表有一个ID
,它是一个自动编号,整数。
实施例:
FIRST_NAME MIDDLE_INITIAL LAST_NAME DOB MEMBER_ID ID John Doe 01/01/1984 AB123456 1 John J Doe 01/01/1984 AB123456 2 John James Doe 01/01/1984 AB123456 3 James Smith 12/01/1965 ZY987654 4 James K Smith 12/01/1965 ZY987654 5 James Smith 08/20/1973 BB754321 6我期待/希望完成以下任务。
保留所有行;但要将ID更新为最小ID。
FIRST_NAME MIDDLE_INITIAL LAST_NAME DOB MEMBER_ID ID John Doe 01/01/1984 AB123456 1 John J Doe 01/01/1984 AB123456 1 John James Doe 01/01/1984 AB123456 1 James Smith 12/01/1965 ZY987654 4 James K Smith 12/01/1965 ZY987654 4 James Smith 08/20/1973 BB754321 6> 我的SQL技能下降,以找出如何做到这一点。
非常感谢任何帮助。
抱歉,不得不编辑/重新发帖。我们的想法是唯一性基于MEMBER_ID
答案 0 :(得分:0)
UPDATE
:
;WITH cte AS(SELECT MEMBER_ID,
MIN(ID) AS ID,
FROM TableName
GROUP BY MEMBER_ID)
UPDATE t SET ID = cte.ID
FROM TableName t
JOIN cte ON t.MEMBER_ID = cte.MEMBER_ID
SELECT
:
;WITH cte AS(SELECT MEMBER_ID,
MIN(ID) AS ID,
FROM TableName
GROUP BY MEMBER_ID)
SELECT t.FIRST_NAME,
t.MIDDLE_INITIAL,
t.LAST_NAME,
t.DOB,
t.MEMBER_ID,
cte.ID
FROM TableName t
JOIN cte ON t.MEMBER_ID = cte.MEMBER_ID
答案 1 :(得分:0)
您是否只是使用DOB,LASTNAME和LASTNAME根据ID对这些用户进行分组?
如果是,那么你可以使用
SELECT * FROM (
SELECT *, ROW_NUMBER () OVER (PARTITION BY DOB,LASTNAME,FIRSTNAME ORDER BY DOBDESC) RN FROM YOURTABLE) A
WHERE A.RN = 1
ORDER BY MEMBNO
获取您需要的结果,然后使用DOB和LASTNAME为每个与行中结果匹配的条目分配新ID
答案 2 :(得分:0)
select table.*, getFirst.firstID
from table
join (select memberID, min(ID) as firstID
from table
group by memberID ) as getFirst
on table.memberID = getFirst.memberID
我认为这也会起作用
select table.*, MIN(ID) OVER(PARTITION BY memberID) AS "MinID"
from table