sql语句:根据某行或某字段进行去重复操作,删除重复的行

在sqlserver中有一个表db, 包含字段orgId, websiteName, supplierShortName.
表db中有多条重复数据,请写一个sql查询语句,根据字段orgId删除重复的行

WITH CTE AS (
    SELECT orgId, websiteName, supplierShortName,
           ROW_NUMBER() OVER (
               PARTITION BY orgId ORDER BY (SELECT NULL)
           ) AS RN
    FROM db
)
DELETE FROM CTE WHERE RN > 1;

该语句使用了CTE(公共表表达式)和窗口函数的组合。首先,CTE将表db中按照 orgId 分组后每组中重复的行编号(RN)起来。接着,在 DELETE 语句中,使用 CTE 来删除RN大于1的行。由于窗口函数 ROW_NUMBER 会为每组中的行分配连续的数字,因此RN大于1的行即为重复的行,而RN等于1的行是每组中的第一行,即不重复的行,因此不会被删除。

同时,由于 ORDER BY 子句需要在此场景下使用,但没有真正的排序需求,选择了 (SELECT NULL) 作为排序依据,表示不排序。

请注意,在执行删除操作之前,最好先备份数据。 若要使用此SQL语句,将 db 更改为您的表名即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值