【发布时间】:2021-04-26 10:31:53
【问题描述】:
我有一个表注册了几个 CAR(重复且不重复),因此我打算更新所有重复注册的字段(活动),留下 1 个最近的行。
表格数据示例:
我希望我的数据是这样的:
我尝试编写此代码,但无法正常工作。因为更新了第一行
-----create table
create table dbo.test( id int, CAR varchar(30), ACTIVE int)
insert into dbo.test(id, CAR, ACTIVE)
values
(1, 'AAA-25-35', 0),
(2, 'LDB-25-35', 0),
(3, 'LDB-00-35', 0),
(4, 'LDB-25-35', 0),
(5, 'LDB-00-35', 0),
(6, 'LDC-10-10', 0),
(7, 'LDC-10-10', 0),
(8, 'LDB-00-35', 0)
select * from dbo.test
----update table
WITH CTE AS
(
SELECT
row_number() over (partition by CAR order by id) as t
, CAR , ACTIVE
FROM dbo.test
)
update CTE
SET ACTIVE = 1
WHERE t=1
select * from dbo.test
【问题讨论】:
-
因为如果有人在 MySql 中有解决方案,我将能够将其转换为 SQLServer。
-
别担心,sql server 团队已经搞定了
-
@JoaquimCosta 请不要那样做...只是 taq 您正在使用的 RDBMS。
-
@JoaquimCosta 改为添加“sql”标签(我现在已经这样做了),因为熟悉多个数据库引擎的人会监控该标签。
-
好的,谢谢。
标签: sql sql-server tsql sql-server-2008