sql - 根据列更新同一表中的相同数据
问题描述
我有一个类似的表情况,就像这个链接的情况一样,从同一个表中更新相同的数据,
但在我的情况下,它必须根据“依赖项”列进行更新。换句话说,它更新表中的重复项,总是留下最新的一行,而对于只有一行的表,它不会更新。我的数据是这样的:
我试过这段代码:
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
andWHERE
子句:
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
推荐阅读
- java - 我在使用 Retrofit2 的 Android 中的 htttp Post Java 中做错了什么?
- python - 如何在yaml文件中使用另一个键的值
- c# - 将现有对象注入 asp.net web api 2 控制器
- c++ - 读取 malloc()ed 对象中的字符串错误字符时出错。为什么?
- linux - 为什么 ubuntu 20.04 没有运行与从终端手动执行的 QT 启动文件相同的启动文件?
- react-native - 了解对 API 的调用
- python - 用于 Pong 的 Python Pygame 照明
- javascript - 如何正确地将 useReducer 操作传递给子级而不导致不必要的渲染
- python - 关系“analysis_result”的“e”列不存在
- python - Python Instabot 错误 - 照片没有兼容的照片纵横比