sqlserver删除重复数据

select identity(int,1,1) as autoID, * into #Tmp from [QYTS_QiYeCecdb]
select min(autoID) as autoID into #Tmp2 from #Tmp group by wanfang_id
select * from #Tmp where autoID in(select autoID from #tmp2)
select * into #Tmp3 from (select * from #Tmp where autoID in(select autoID from #tmp2)) as T
select * from #Tmp3
delete [QYTS_QiYeCecdb]
insert into [QYTS_QiYeCecdb] (
    [wanfang_id]
      ,[企业名称]
      ,[铭牌]
      ,[简称]
      ,[曾用名]
      ,[负责人姓名]
      ,[负责人]
      ,[省名]
      ,[市名]
      ,[县名]
      ,[行政区代码]
      ,[地址]
      ,[电话]
      ,[区位号]
      ,[传真]
      ,[邮码]
      ,[电子邮件]
      ,[网址]
      ,[成立年代]
      ,[注册资金]
      ,[固定资产]
      ,[职工人数]
      ,[技术人员数]
      ,[营业额]
      ,[利税]
      ,[创汇额]
      ,[进出口权]
      ,[性质与级别]
      ,[股票代码]
      ,[机构类型]
      ,[企业简介]
      ,[企业占地面积]
      ,[厂房办公面积]
      ,[主管单位]
      ,[派出机构]
      ,[行业GBM]
      ,[行业SIC]
      ,[商标]
      ,[产品信息]
      ,[经营项目]
      ,[经营项目英]
      ,[产品关键词]
      ,[英文产品关键词]
      ,[产品SIC]
      ,[产品GBM]
      ,[企业排名]
      ,[重点行业]
      ,[成品数据]
      ,[电力数据]
      ,[冶金数据]
      ,[ID]
      ,[f_id] )  select [wanfang_id]
      ,[企业名称]
      ,[铭牌]
      ,[简称]
      ,[曾用名]
      ,[负责人姓名]
      ,[负责人]
      ,[省名]
      ,[市名]
      ,[县名]
      ,[行政区代码]
      ,[地址]
      ,[电话]
      ,[区位号]
      ,[传真]
      ,[邮码]
      ,[电子邮件]
      ,[网址]
      ,[成立年代]
      ,[注册资金]
      ,[固定资产]
      ,[职工人数]
      ,[技术人员数]
      ,[营业额]
      ,[利税]
      ,[创汇额]
      ,[进出口权]
      ,[性质与级别]
      ,[股票代码]
      ,[机构类型]
      ,[企业简介]
      ,[企业占地面积]
      ,[厂房办公面积]
      ,[主管单位]
      ,[派出机构]
      ,[行业GBM]
      ,[行业SIC]
      ,[商标]
      ,[产品信息]
      ,[经营项目]
      ,[经营项目英]
      ,[产品关键词]
      ,[英文产品关键词]
      ,[产品SIC]
      ,[产品GBM]
      ,[企业排名]
      ,[重点行业]
      ,[成品数据]
      ,[电力数据]
      ,[冶金数据]
      ,[ID]
      ,[f_id] from #Tmp3
drop table #Tmp,#Tmp2

转载于:https://www.cnblogs.com/mn232nm/p/3550527.html

SQL Server 中删除重复数据通常通过聚集函数、自连接查询或使用内置的 `DISTINCT` 关键字结合 `DELETE` 或 `INSERT INTO ... SELECT DISTINCT` 来实现。以下是几种常见的方法: 1. **使用 `DISTINCT`**: 如果你想删除某个表中的所有重复行,可以先创建一个新的临时表,只包含唯一的数据,然后将这些行插入到原始表中。 ```sql INSERT INTO TableName DistinctColumn1, DistinctColumn2... SELECT DISTINCT Column1, Column2... FROM TableName; ``` 2. **使用 `DELETE` 和 `GROUP BY`**: 首先,找出重复的行,然后根据需要的唯一标识符删除非第一个出现的行。 ```sql DELETE T1 FROM TableName T1 INNER JOIN ( SELECT Column1, Column2, ROW_NUMBER() OVER(PARTITION BY Column1, Column2 ORDER BY (SELECT NULL)) AS RN FROM TableName ) T2 ON T1.Column1 = T2.Column1 AND T1.Column2 = T2.Column2 WHERE T2.RN > 1; ``` 3. **使用 `CTE`(公共表表达式)**: 可以通过递归的方式从原始表开始,逐步删除重复项。 ```sql WITH CTE recursive (ID, DupRows) AS ( SELECT ID, COUNT(*) OVER(PARTITION BY Column1, Column2) as DupRows FROM TableName UNION ALL SELECT t.ID, c.DupRows - 1 FROM TableName t JOIN CTE c ON t.Column1 = c.Column1 AND t.Column2 = c.Column2 WHERE c.DupRows > 1 ) DELETE FROM TableName WHERE ID IN (SELECT ID FROM CTE WHERE DupRows > 1); ``` 请注意,执行此类操作前务必备份数据,以防误删重要信息。同时,不同的场景可能需要调整上述示例以适应你的实际需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值