34,591
社区成员
发帖
与我相关
我的任务
分享
;WITH CTE AS(
SELECT FID,FNAME,BNAME
,ROW_NUMBER()OVER(PARTITION BY FNAME ORDER BY FID)RN1
,ROW_NUMBER()OVER(PARTITION BY FNAME ORDER BY FID DESC)RN2
FROM TEST
)
UPDATE T1
SET BNAME=T2.BNAME
FROM CTE T1
JOIN CTE T2 ON T1.FNAME=T2.FNAME
WHERE T1.RN1=1 AND T2.RN2=1
;WITH CTE AS(
SELECT FID,FNAME,BNAME
,ROW_NUMBER()OVER(PARTITION BY FNAME ORDER BY FID)RN
FROM TEST
)
DELETE CTE
WHERE RN>1
SQL 2005+UPDATE TEST
SET BNAME=(SELECT TOP 1 BNAME FROM TEST T WHERE TEST.FNAME=T.FNAME ORDER BY FID DESC)
DELETE TEST
WHERE EXISTS(SELECT 1 FROM TEST AS T WHERE TEST.FNAME=T.FNAME AND TEST.FID>T.FID)
兼容SQL2000
如果是SQL2005 可以结合ROW_NUMBER