Sql 根据列更新同一表中的相同数据

Sql 根据列更新同一表中的相同数据,sql,sql-server,Sql,Sql Server,我有一个类似于表的案例,就像这个链接的案例一样 但在我的例子中,它必须根据“dependency”列进行更新。换句话说,它更新表中的重复,总是保留最近的一行,对于只有一行的表,它不更新。我的数据如下: 我希望它像这样更新: 我尝试了以下代码: create table dbo.test( id int, CAR varchar(30), ACTIVE int, dependency int) insert into dbo.test(id, CAR, ACTIVE, depende

我有一个类似于表的案例,就像这个链接的案例一样 但在我的例子中,它必须根据“dependency”列进行更新。换句话说,它更新表中的重复,总是保留最近的一行,对于只有一行的表,它不更新。我的数据如下:

我希望它像这样更新:


我尝试了以下代码:

create table dbo.test( id int, CAR varchar(30), ACTIVE int, dependency int)
    
 insert into dbo.test(id, CAR, ACTIVE, dependency)
 values 


(1, 'AAA-25-35', 0,1),
(2, 'LDB-25-35', 0,2),
(3, 'LDB-00-35', 0,2),
(4, 'LDB-25-35', 0,2),
(5, 'LDB-00-35', 0,2),
(6, 'LDC-10-10', 0,2),
(7, 'LDC-10-10', 0,2),
(8, 'LDB-00-35', 0,2),
(9, 'AAA-25-35', 0,1),
(10, 'AAA-25-35', 0,3),
(11, 'AAA-25-35', 0,3),
(12, 'BBB-25-35', 0,2),
(13, 'BBB-25-35', 0,3),
(14, 'BBB-25-35', 0,3)

GO 
SELECT * FROM TEST


WITH CTE AS
(
  SELECT ROW_NUMBER() OVER(PARTITION BY CAR ORDER BY ID) AS t,
         CAR,
         ACTIVE
  FROM Test
)

UPDATE CTE
SET ACTIVE = 1
WHERE t=1
AND EXISTS (SELECT 1 FROM CTE c WHERE c.CAR = CTE.CAR GROUP BY CAR HAVING COUNT(*) > 1)

go
SELECT * FROM  test

尝试更改
SELECT
WHERE
子句:

WITH CTE AS (
  SELECT ROW_NUMBER() OVER(PARTITION BY CAR, dependency ORDER BY ID) AS t,
         LEAD(id) OVER (PARTITION BY CAR, dependency ORDER BY ID) as next_id,
         CAR,
         ACTIVE
  FROM Test
)
UPDATE CTE
SET ACTIVE = 1
WHERE t = 1 AND next_id IS NOT NULL

值得注意的是,这是一个未经验证的问题,他没有将“活动”列更新为“汽车”列,这反映在相同的“依赖性”中。您可以检查CAR='LDB-00-35',您应该更新前两行并留下一行。代码正好相反,看看这个。结果与问题中描述的输出完全相同。我能够解决它,我删除了更新条件“WHERE t=1且next_id不为NULL”,只留下了“WHERE next_id不为NULL”,我错误地共享了第一个结果。谢谢你的关注。