具有最小 ID 的自动编号整数到 Varchar
AutoNumber Integer to Varchar with min ID
我有一个 table 列 FirstName
、Middle_Initial
、Last_Name
、Date_of_Birth
、MemberID
和 ID
可能有很多 "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
我有一个 table 列 FirstName
、Middle_Initial
、Last_Name
、Date_of_Birth
、MemberID
和 ID
可能有很多 "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
为与行中的结果匹配的每个条目分配一个新 IDselect 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