具有最小 ID 的自动编号整数到 Varchar

AutoNumber Integer to Varchar with min ID

我有一个 table 列 FirstNameMiddle_InitialLast_NameDate_of_BirthMemberIDID可能有很多 "flavors" 当前 table 有一个 ID,它是一个自动编号,整数。

示例:

 FIRST_NAME MIDDLE_INITIAL LAST_NAME 出生日期 MEMBER_ID ID
 无名氏 1984 年 1 月 1 日 AB123456 1
 John J Doe 1984 年 1 月 1 日 AB123456 2
 约翰·詹姆斯·多伊 01/01/1984 AB123456 3
 詹姆斯·史密斯 12/01/1965 ZY987654 4
 詹姆斯 K 史密斯 12/01/1965 ZY987654 5
 詹姆斯史密斯 08/20/1973 BB754321 6
  
我looking/hoping完成以下任务。

保留所有行;但将 ID 更新为最小 ID。

 FIRST_NAME MIDDLE_INITIAL LAST_NAME 出生日期 MEMBER_ID ID
 无名氏 1984 年 1 月 1 日 AB123456 1
 John J Doe 1984 年 1 月 1 日 AB123456 1
 约翰·詹姆斯·多伊 1984 年 1 月 1 日 AB123456 1
 詹姆斯·史密斯 12/01/1965 ZY987654 4
 詹姆斯 K 史密斯 12/01/1965 ZY987654 4
 詹姆斯史密斯 08/20/1973 BB754321 6
  
> 我的 SQL 技能下降以弄清楚如何做到这一点。

如有任何帮助,我们将不胜感激。

抱歉,不得不 edit/re-post。这个想法是唯一性基于 MEMBER_ID

对于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

您是否只是使用 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
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