首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL表中更改重复ID

在SQL表中更改重复ID
EN

Stack Overflow用户
提问于 2017-10-10 21:05:08
回答 2查看 450关注 0票数 0

我在一个应该是唯一的列中有一个重复的ID。我想运行一个update查询,只编辑ID的第二次出现,而不是全部。

例如-如果我运行这个:

代码语言:javascript
复制
SELECT *
FROM [dbo].[Time_Frame]
WHERE [Respondent ID: Respondent] = 283028

我明白了:

答辩人身份证:答辩人年度季度

  • 283028,2013年,Q1 2013年
  • 283028,2015年,Q3 2015年

如何只编辑第二行ID,比如从283028到28302899,以确保我的表中仍然有相同的行数,但所有ID都是唯一的?

我的桌子上有837个复印机。当我尝试更新时,它将更新1674行,而不仅仅是重复ID的837行。

谢谢你能给我的任何帮助!

EN

回答 2

Stack Overflow用户

发布于 2017-10-10 21:09:23

您可以使用可更新的CTE来完成此操作:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-10-11 08:20:08

我认为下面的查询应该有效。

代码语言:javascript
复制
            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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46676017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档