我的REDIRECTS表格中有一个包含CUSTOMERNAME和REDIRECTNAME列的表格,如下所示
ID NAME REDIRECTLINK
1 Gregory XYUS_555
2 Sam VYU_787
3 Smith XYUS_555
4 John PPIU_987
所以基本上我想更新副本并为它添加一个数字,就像史密斯应该
一样Smith XYUS_555_01
将照顾副本。我只是不确定如何只更新副本。我有以下内容来查找重复项:
SELECT
REDIRECTLINK, COUNT(*) dupcount
FROM
REDIRECTS
WHERE
REDIRECTLINK IS NOT NULL
GROUP BY
REDIRECTLINK
HAVING
COUNT(*) > 1
这告诉我每个重定向链接有多少重复,但是如何更新重复链接?
UPDATE REDIRECTS
SET REDIRECTLINK = REDIRECTLINK + '01" //NOT SURE HOW TO APPROACH THIS
WHERE REDIRECTLINK IN (
SELECT REDIRECTLINK
FROM REDIRECTS
GROUP BY REDIRECTLINK
HAVING ( COUNT(REDIRECTLINK) > 1 )
)
我在上面的代码上遇到了问题,因为我不确定如何将其与找到的副本相关联,而不是两者。
答案 0 :(得分:1)
您可以UPDATE
使用JOIN
:
;WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY Id DESC) AS rn
FROM REDIRECTS
)
UPDATE REDIRECTS
SET REDIRECTLINK = REDIRECTLINK + '01'
FROM cte
INNER JOIN REDIRECTS
ON REDIRECTS.Id = cte.Id
WHERE cte.rn = 1;
您可以查看this post了解详情
答案 1 :(得分:1)
首先使用ROW_NUMBER()确定RedirectLink的子编号(并减去1使其从零开始)。然后在更新中使用它来更新子编号大于零的所有记录。
with NT as (
select
ID,
Row_Number() over (PARTITION BY RedirectLink ORDER BY ID)-1 as Nr
from Table1
)
update T
set T.RedirectLink = T.RedirectLink + '_' + cast(NT.Nr as varchar)
FROM Table1 T
JOIN NT ON (NT.ID = T.ID)
where Nr>0
答案 2 :(得分:0)
如果我理解正确,您可以使用row_number()来识别您的副本,然后更新row_number为>的那些。 1。
select
id,
redirectlink,
row_number() over (partition by redirectlink order by id)
from
table1