我现用以下语句来过滤"注册号"这个字段的数据,目的是在不删除任何一整条数据的情况下让"注册号"这个值没重复.
update [工商].[dbo].[企业] set [注册号]=case when checksum(*)=(select top 1 checksum(*) from [工商].[dbo].[企业]
where [注册号]=t.[注册号]) then [注册号] else '' end from [工商].[dbo].[企业] t我这里有700万左右的数据,执行了15天都还没过滤完,估计要一个月,这样太慢了,有没有高效的语句提供一下?谢谢了.要实现的目的是:在不删除任何一整条数据的前提下过滤"注册号"这个字段的重复值.

解决方案 »

  1.   

    举例:
    处理前:
    ID 注册号
    ---------
    1   6623632
    2   36589333
    3   6623632
    4   69689666
    处理后:
    ID 注册号
    ---------
    1   6623632
    2   36589333
    3   
    4   69689666
    因ID 1 和3的注册号是相同的,经处理后3被替换为空白,只保留ID 1的值.这样的语句处理写才高效?
      

  2.   


    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万数据,用户也不可能一眼都看到,往前台页面返回数据的时候还是需要分页处理。页面的话每页数据量不大,效率上就好处理了。