Ответ 1
Попробуйте это с помощью CTE
и PARTITION 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
У меня есть таблица, в которой есть столбец с повторяющимися значениями. Я хотел бы обновить одно из двух повторяющихся значений, например, row1 = tom
и row2 = tom
. Я хочу добавить один или один из одного из них, и это будет для многих других дубликатов в том же столбце. В основном просто добавьте одно число или письмо к каждому из 1 дубликатов, чтобы больше дубликатов не было.
Я получил этот запрос, который будет обновлять все дубликаты, но не один из них. Может ли кто-нибудь помочь?
UPDATE Table1
SET Column1 = 'a'
WHERE exists
(SELECT Column1 , COUNT(Column1 )
FROM Clients
GROUP BY Column1
HAVING ( COUNT(Column1 ) > 1)
)
Попробуйте это с помощью CTE
и PARTITION 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
Я думаю, что это простое обновление - то, что вы ищете;
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');
Я думаю, вы можете использовать оператор TOP() вместо метода row_number(), это поможет вам обновить его простым и простым способом.
UPDATE TOP ( 1 )Table1 SET Column1 = 'a';
Предположим Table1
, содержащий следующую информацию:
Column1
========
tom
john
jack
tom
james
jane
Обратите внимание, что первая и четвертая строки идентичны. Здесь команда 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
вы можете обновить последнее обнаружение дублированной записи
Если у нас есть это условие:
SELECT Column1 FROM Clients ORDER BY Column1
Column1
**********
Jhon
Jhon
Mike
Mike
Mike
Robert
Это будет работать, даже если Column1
был дублирован 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
Попробуйте этот помощник
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
)
Мне пришлось помещать внутри внутри, так как мой разработчик sql не хотел обновлять Копирование из ответа Нитеша
он выглядел так:
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
)
попробуй это
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
UPDATE table1
SET STATUS = 'F'
WHERE column1=
(SELECT (column1)
FROM table1
GROUP BY column1
HAVING (COUNT(column1 ) > 1))