表T_Branch包含以下两个字段
BranchID     Value     ....
  a           11
  a           5
  b           6
  d           17
  a           8
  d           16
  c           6
  a           14
  a           12
  d           4
  a           4
  b           4
  a           4
  .           .
  .           .
  .           .BranchID为的值域为{a,b,c,d,e,f,...},每个值在表中记录数是未知的如何删除该表的一些记录,只保留每个BranchID值以Value降序的前10个值?
如果某个BranchID值的记录不足10条,则该BranchID值的记录全部保留.

解决方案 »

  1.   

    delete A from T_Branch A where A.BranchID+cast([value] as varchar) not in 
      (select top 3 BranchID+cast([value] as varchar) from T_Branch where BranchID=A.BranchID order by [Value] desc) 
    试过了,可以。
      

  2.   

    delete A from T_Branch A where A.BranchID+cast([value] as varchar) not in 
      (select top 10 BranchID+cast([value] as varchar) from T_Branch where BranchID=A.BranchID order by [Value] desc) 
    试过了,可以。
      

  3.   

    Delete T_Branch where BranchId+convert(varchar,Value) not in (
    Select Top 5 BranchID+convert(varchar,Value) from T_Branch order by Value 
    )
    可以成功的
      

  4.   

    再麻烦一点,可以做个视图,选前10行的,然后再NOT IN 连接。
      

  5.   

    虽然我没有试,但一看就知道ecivilian(抽象青年) 说的是对的