我现用以下语句来过滤"注册号"这个字段的数据,目的是在不删除任何一整条数据的情况下让"注册号"这个值没重复.
update [工商].[dbo].[企业] set [注册号]=case when checksum(*)=(select top 1 checksum(*) from [工商].[dbo].[企业]
where [注册号]=t.[注册号]) then [注册号] else '' end from [工商].[dbo].[企业] t我这里有700万左右的数据,执行了15天都还没过滤完,估计要一个月,这样太慢了,有没有高效的语句提供一下?谢谢了.要实现的目的是:在不删除任何一整条数据的前提下过滤"注册号"这个字段的重复值.
update [工商].[dbo].[企业] set [注册号]=case when checksum(*)=(select top 1 checksum(*) from [工商].[dbo].[企业]
where [注册号]=t.[注册号]) then [注册号] else '' end from [工商].[dbo].[企业] t我这里有700万左右的数据,执行了15天都还没过滤完,估计要一个月,这样太慢了,有没有高效的语句提供一下?谢谢了.要实现的目的是:在不删除任何一整条数据的前提下过滤"注册号"这个字段的重复值.
处理前:
ID 注册号
---------
1 6623632
2 36589333
3 6623632
4 69689666
处理后:
ID 注册号
---------
1 6623632
2 36589333
3
4 69689666
因ID 1 和3的注册号是相同的,经处理后3被替换为空白,只保留ID 1的值.这样的语句处理写才高效?
declare @T1 table (ID int,注册号 int)
insert into @T1
select 1,6623632 union all
select 2,36589333 union all
select 3,6623632 union all
select 4,69689666;with maco as
(
select *,row_number() over (partition by 注册号 order by ID) as rid from @T1
)select ID,注册号=case when rid=1 then ltrim(注册号) else '' end from maco
order by ID/*
ID 注册号
----------- ------------
1 6623632
2 36589333
3
4 69689666
*/
700万数据,用户也不可能一眼都看到,往前台页面返回数据的时候还是需要分页处理。页面的话每页数据量不大,效率上就好处理了。