有一Table 的结构如下: 字段一(递增) 字段二 字段三 字段四 字段五 ...
 
  1             a       b      c        4  ...
  2             t       r      e        3  ...
  3             a       b      c        4  ...
  4             a       b      c        4  ...
  5             t       r      e        3  ...
  6             y       u      i        8
  7             h       i      y        7
  8             t       r      e        3
  9             y       u      i        8  ....问题?
 
  一、列出没有重复的记录集!
  这里所指的重复记录,除递增字段外,其它字段相同,同时,要求列出递增字段
  (对于递增字段各记录值不同,这里列出首次出现的递增字段值就可以了)    二、统计重复记录的记录数量!(count)
   这里所指的重复记录,除递增字段外,其它字段相同。  就以上两个问题,不知我有无代表清楚!,
  我随实现了以上两个问题的解决,但总觉得过于复杂
  第一个,我用到了 游标 
  第二个 Select a,b,c Form Tbl Group by ..... (对于列无限增多时,??)
 
  大家,有无好一点的做法,):
  
    这分一定会结的!各位放心!
  

解决方案 »

  1.   

    1.这个可能是可以实现得
      select * from table 
        where Field_1 in( select min(Field_1),Field_2,Field_3,Field_4, .... ,Field_n)
        group by Field_2,Field_3,Field_4, .... ,Field_n
    2.
      select count(Field_1) as count_,
        Field_2,Field_3,Field_4, .... ,Field_n 
        from table 
        group by Field_2,Field_3,Field_4, .... ,Field_n对SQL Server 实用
      

  2.   

    先回答第二个问题吧寻找重复的纪录,要用到group by ,而group by后面的字段组合就是你需要辨别的字段组合了,没有别的办法,你既然要求就只好全部打上了......总不能真的无限吧select 字段,count(*) from table group by 字段二 字段三 字段四 字段五 ... having
    count(*)>1然后回答第一个问题select * from table where 字段1 in
    (select min(字段1) from table group by 字段二 字段三 字段四 字段五 ... having
    count(*)>1)
    union
    (select min(字段1) from table group by 字段二 字段三 字段四 字段五 ... having
    count(*)=1)这段SQL的意思就是完成了没有重复字段的每一条纪录和有重复字段的第一条纪录的所有数据集合希望对楼主有用
      

  3.   

    having count(*) 的用法楼主应该明白吧~~如果不明白我可以和你讲讲union就是联合,说白了就是相加别的都很简单,上面的语句可以优化,但是为了楼主方面阅读我用了union,希望楼主自己可以优化一下
      

  4.   

    发现写错了.........脸红ingselect * from table where 字段1 in
    (select min(字段1) from table group by 字段二 字段三 字段四 字段五 ... having
    count(*)>1)
    union
    select * from table where 字段1 in
    (select min(字段1) from table group by 字段二 字段三 字段四 字段五 ... having
    count(*)=1)或者
    select * from table where 字段1 in
    (select min(字段1) from table group by 字段二 字段三 字段四 字段五 ... having
    count(*)>1)
    or 字段1 in
    (select min(字段1) from table group by 字段二 字段三 字段四 字段五 ... having
    count(*)=1)
      

  5.   

    bluemeteor(挂月||╭∩╮(︶︿︶)╭∩╮)  呵呵,解决了,谢谢!从这里有点启发呢!