我在列中应该是唯一的重复ID。我想运行更新查询以仅编辑ID的第二次出现并非全部。
例如 - 如果我运行它:
SELECT *
FROM [dbo].[Time_Frame]
WHERE [Respondent ID: Respondent] = 283028
我明白了:
受访者ID:受访者年份
283028,2013,2013年第1季度
283028,2015,2015年第3季度
如何编辑第二行ID,从283028到28302899,以便我可以确保我的表中仍有相同的行数,但所有ID都是唯一的?
我的表中有837个重复项。当我尝试更新时,它将更新1674行,而不仅仅是重复ID的837行。
提前感谢您提供给我的任何帮助!
答案 0 :(得分:1)
您可以使用可更新的CTE执行此操作:
with toupdate as (
select tf.*,
row_number() over (partition by [Respondent ID: Respondent] order by year, quarter) as seqnum
from [dbo].[Time_Frame] tf
)
update toupdate
set [Respondent ID: Respondent] = [Respondent ID: Respondent]*1000 + seqnum
where seqnum > 1;
这比你的方法更通用。它枚举重复键,结果是键是唯一的(假设每个键不超过998个重复项)。
答案 1 :(得分:0)
我认为以下查询应该有效。
CREATE TABLE TIME_FRAME
(
ID INT ,
YEAR INT ,
QTR VARCHAR(100)
)
INSERT INTO TIME_FRAME
SELECT 283028,2013,'Q1 2013'
INSERT INTO TIME_FRAME
SELECT 283028,2015,'Q3 2015'
INSERT INTO TIME_FRAME
SELECT 283029,2013,'Q1 2013'
INSERT INTO TIME_FRAME
SELECT 283029,2015,'Q3 2015'
INSERT INTO TIME_FRAME
SELECT 283030,2013,'Q1 2013'
INSERT INTO TIME_FRAME
SELECT 283030,2015,'Q3 2015'
CREATE TABLE #TEMP
(
TEMPID INT IDENTITY(1,1),
ID INT ,
YEAR INT ,
QTR VARCHAR(100)
)
INSERT INTO #TEMP(ID , YEAR,QTR)
SELECT * FROM TIME_FRAME
BEGIN TRAN
UPDATE T
SET T.ID = TT.ID*100 -1
FROM TIME_FRAME T
JOIN #TEMP TT
ON T.ID = TT.ID
AND T.QTR = TT.QTR
AND T.YEAR = TT.YEAR
AND TT.TEMPID IN (SELECT MAX(TEMPID) FROM #TEMP
GROUP BY ID)
SELECT * FROM TIME_FRAME
--ROLLBACK TRAN