delete from table where chechsum(*) not in ( select max(checksum(*)) from table group by ziduan) 类似这样,自己去写写吧
这样不行,能说详细点吗?
如果可以的话最好能留住各个字段内容最全的哪一条! 这个定义太模糊 而且只有你自己才知道什么叫内容最全
你给表加一个字段比如叫flag
然后你就得写代码找出内容最全的一条 把它的flag设置成Y (这个过程别人可帮不了你)
然后把所有的记录flag不等于Y的都删除就是了
再把flag这个字段从表中删除就是了
---------
如果是随便留一条就简单多了
按照2楼的说法 有可能不行
CHECKSUM
返回在表的行上或在表达式列表上计算的校验值。CHECKSUM 用于生成哈希索引。
语法
CHECKSUM ( * | expression [ ,...n ] )
参数
*
指定在表的所有列上进行计算。如果有任一列是非可比数据类型,则 CHECKSUM 返回错误。不可比数据类型是 text、ntext、image、cursor 以及基本类型为前 4 个数据类型之一的 sql_variant。
expression
是除非可比数据类型之外的任何类型的表达式。
这个函数对于数据类型有限制。
我的方案是加一个Identity的字段 比如叫record_id
select field1,max(record_id) as record_id into #1 from table1 group by field1
delete table1 where record_id not in (select record_id from #1)
select 字段1,字段2 into #tmp1
from table where 条件(重复字段1,字段2) group by 字段1,字段2 having count(*)>=2
delete a
from table a
inner join #tmp1 b on a.字段1=b.字段1 and a.字段2=b.字段2
insert into table (字段1,字段2)
select 字段1,字段2 from #tmp1
drop table #tmp1