我看到有很多方法可以在 SQL Server 中删除重复行。然而,最后总是剩下一原始行。 例如在 6 行的数据集中
我有相同的 P-id 和 E_id,但有 3 个不同的 CarNumber。
P_id | E_id | 车号 |
---|---|---|
11556 | 162611 | MRSU5111853 |
11556 | 162611 | MRSU5111853 |
11556 | 162611 | MRSU5111853 |
11556 | 162611 | MRSU5111852 |
11556 | 162611 | MRSU5111852 |
11556 | 162611 | MRSU5111851 |
with cte as
(select *, ROW_NUMBER() over(Partition by P_id, E_Id, CarNumber order by P_id, E_Id, CarNumber) as rowNumber
from [Employee])
delete from cte where rowNumber > 1
运行此查询将返回 3 行不同的 carNumber 类似
P_id | E_id | 车号 |
---|---|---|
11556 | 162611 | MRSU5111853 |
11556 | 162611 | MRSU5111852 |
11556 | 162611 | MRSU5111851 |
然而,我只是想挽留
P_id | E_id | 车号 |
---|---|---|
11556 | 162611 | MRSU5111851 |
并删除其余部分。我怎样才能在不使用变量、参数的情况下获得它。该查询需要进入 SSIS 执行 SQL 任务,因此寻找简单的解决方案。 预先感谢。
我厌倦了CTE和子查询,但没有得到预期的结果。
从
PARTITION BY
中删除车号将为您提供想要的结果
with cte as
(select *
, ROW_NUMBER() over(Partition by P_id, E_Id order by P_id, E_Id, CarNumber) as rowNumber
from [Employee])
delete from cte where rowNumber > 1
5 rows affected
SELECT * FROM Employee
P_id | E_id | 车号 |
---|---|---|
11556 | 162611 | MRSU5111851 |