복붙노트

[SQL] 는 SQL 서버 데이터베이스 테이블이 개 중복 업데이트 한

SQL

는 SQL 서버 데이터베이스 테이블이 개 중복 업데이트 한

나는 중복 값과 열을 가지고있는 테이블을 가지고있다. 내가 그렇게 예를 들어 ROW1 = 톰과 ROW2 = 톰에 대한이 개 중복 값 중 하나를 업데이트하고 싶습니다 .. 내가 추가 할 하나 또는 그 중 하나 그에게 A가 같은 열에서 많은 중복 될 것입니다. 기본적으로 너무 더 이상 중복 거기에 중복의 모든 하나 하나 개의 숫자 또는 문자를 추가합니다.

나는 그들 중 하나를 모든 중복을 업데이트 할 수 있지만하지 않습니다이 쿼리를 얻었다. 누구든지 도움이 수 있습니까?

UPDATE Table1
   SET Column1 = 'a'
 WHERE exists
       (SELECT Column1 , COUNT(Column1 )
FROM Clients
GROUP BY Column1 
HAVING ( COUNT(Column1 ) > 1)
)

해결법

  1. ==============================

    1.CTE 및 파티션 BY와 함께이 시도

    CTE 및 파티션 BY와 함께이 시도

    ;WITH cte AS
    (
      SELECT
          ROW_NUMBER() OVER(PARTITION BY Column1  ORDER BY Column1 ) AS rno,
          Column1 
      FROM Clients
    )
    
    UPDATE cte SET Column1 =Column1 +' 1 '
    WHERE rno=2
    
  2. ==============================

    2.나는이 간단한 업데이트 당신이 찾고있는 무슨 생각;

    나는이 간단한 업데이트 당신이 찾고있는 무슨 생각;

    UPDATE Table1 SET Column1=Column1+CAST(id AS VARCHAR)
    WHERE id NOT IN (
      SELECT MIN(id) 
      FROM Table1
      GROUP BY Column1
    );
    

    입력:

    (1,'A'),
    (2,'B'),
    (3,'A'),
    (4,'C'),
    (5,'C'),
    (6,'A');
    

    산출:

    (1,'A'),
    (2,'B'),
    (3,'A3'),
    (4,'C'),
    (5,'C5'),
    (6,'A6');
    

    로 테스트하는 SQLfiddle.

  3. ==============================

    3.나는 당신이 쉽고 간단한 방법의 하나를 업데이트하는 데 도움이 될 것입니다 당신이 TOP () 대신 ROW_NUMBER () 메소드의 연산자를 사용할 수 있다고 생각

    나는 당신이 쉽고 간단한 방법의 하나를 업데이트하는 데 도움이 될 것입니다 당신이 TOP () 대신 ROW_NUMBER () 메소드의 연산자를 사용할 수 있다고 생각

    UPDATE TOP ( 1 )Table1 SET Column1 = 'a';
    
  4. ==============================

    4.다음과 같은 정보를 포함하는 표를 가정합니다 :

    다음과 같은 정보를 포함하는 표를 가정합니다 :

    Column1      
    ========  
    tom        
    john   
    jack    
    tom     
    james
    jane 
    

    공지 제 1 및 제 4 행은 동일 함. 여기에 그 중 하나의 이름을 변경하는 UPDATE 명령입니다.

    UPDATE Table1 AS t1
       SET Column1 = 'jennifer'
     WHERE rrn(t1) =
           (SELECT MAX(rrn(t2))
              FROM Table1 AS t2
             WHERE Column1 = 'tom')
    

    그리고 결과는 것

    Column1      
    ========  
    tom        
    john   
    jack    
    jennifer
    james
    jane 
    

    RRN 기능 중복 레코드의 마지막 occurance를 업데이트 할 수 있습니다

  5. ==============================

    5.우리는이 조건이있는 경우 :

    우리는이 조건이있는 경우 :

    SELECT Column1 FROM Clients ORDER BY Column1
    
    Column1
    **********
    Jhon
    Jhon
    Mike
    Mike
    Mike
    Robert
    

    이 열 1 중복 된 n 번, 그것은 첫 번째 제외한 모든 중복 행에 행 번호를 추가합니다 경우에도이 시도 작동합니다 :

    BEGIN 
    
    ;WITH CTE AS 
    (
        SELECT 
            ROW_NUMBER() OVER (PARTITION BY Column1 ORDER BY Column1) AS ROWNUMBER,
            Column1
        FROM Clients
    )
    
    UPDATE CTE 
    SET Column1 = CONCAT(Column1, ' ', (ROWNUMBER - 1))
    WHERE ROWNUMBER > 1
    
    SELECT Column1 FROM Clients ORDER BY Column1
    
    END 
    

    결과:

    Column1
    ***********
    Jhon
    Jhon 1
    Mike
    Mike 1
    Mike 2
    Robert
    
  6. ==============================

    6.이 짝을보십시오

    이 짝을보십시오

    UPDATE Table1 
    SET Column1 = column1 +'a'   
    WHERE exists(
            select row 
            from (
                SELECT 
                    Column1 , 
                    Row_Number() over(Partition by Column1 order by Column1) as row 
                FROM Clients
            ) as subquery 
            where subquery.row = 2
        )
    
  7. ==============================

    7.나는 a로 업데이트처럼 내 SQL 개발자 didnt 한 이후로부터 내부로 넣어했다 Nithesh의 대답에서 복사

    나는 a로 업데이트처럼 내 SQL 개발자 didnt 한 이후로부터 내부로 넣어했다 Nithesh의 대답에서 복사

    그것은이처럼 보이는 결국 :

    UPDATE Clients 
    SET Column1 = 'a'
    WHERE ColumnID IN (select ColumnID from 
     (  
     SELECT
           row_number() OVER(PARTITION BY Column1  ORDER BY Column1 ) AS rno,
           ColumnID FROM Clients
     )
                       where rno=2   
                      )
    
  8. ==============================

    8.이 시도

    이 시도

    with test as 
    (
       select ROW_NUMBER() over (order by salary)rr, salary , emp_no 
       from salary
    )update test set emp_no=10007 where emp_no='10002'  and rr=3
    
  9. ==============================

    9.

    UPDATE table1
    SET STATUS = 'F'
    WHERE column1= 
       (SELECT (column1)
        FROM table1
        GROUP BY column1 
        HAVING (COUNT(column1 ) > 1))
    
  10. ==============================

    10.

    update wmwhse1.sku
    set descr= concat (descr,'.')
    where exists
    (select SKU,count (DESCR)
    from wmwhse1.sku
    group by descr
    having (count (DESCR)>1))
    

    나는이 스크립트를 실행하면 모든 SKU 설명을 업데이트하고 있습니다.

    출력 : 경우 1 행은 영향되어야

  11. ==============================

    11.나는이 솔루션을 발견했다 :

    나는이 솔루션을 발견했다 :

    내 테이블 장치는 이미 데이터를하고 "시리얼"열은 고유해야합니다. 은 "ID"는 기본 키입니다. 임의의 6 자리 값을 원래 값 후 연접된다.

    UPDATE devices 
    SET serial=CONCAT(serial,'_',LPAD(FLOOR(RAND() * 999999.99), 6, '0'))    
        where id in 
        (select * FROM( 
            SELECT d1.id as id 
            FROM devices as d1, devices as d2 
            WHERE d1.id <> d2.id and d1.serial=d2.serial) as subdevices
        )
    
  12. from https://stackoverflow.com/questions/17783906/update-one-of-2-duplicates-in-an-sql-server-database-table by cc-by-sa and MIT license