SELECT DISTINCT ProductsNum,huohao,CategoryName1,Category2,Category3,xiaoshou FROM CMS_viewgoodsList where flag=1为什么结果里面还存在相同的ProductsNum?------------------------------------------
改用
SELECT ProductsNum, huohao, CategoryName1, Category2, Category3, XiaoShou
FROM CMS_viewgoodsList
GROUP BY ProductsNum, huohao, CategoryName1, Category2, Category3, XiaoShou还是有相同的ProductsNum记录!怎么不去掉相同的ProductsNum记录只剩一条?
-------------------------
重复记录:
----------------
ProductsNum  huohao  CategoryName1 ,Category2 ,Category3,  xiaoshou
193           806        衣服           110           6        86
193           806        衣服           110           6        93

解决方案 »

  1.   

    SELECT ProductsNum, huohao, CategoryName1, Category2, Category3, min(XiaoShou) AS XiaoShou
    FROM CMS_viewgoodsList
    GROUP BY ProductsNum, huohao, CategoryName1, Category2, Category3
      

  2.   

    删除数据库中重复数据的几个方法
      数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置…… 
      方法一 
    declare @max integer,@id integer
      declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
      open cur_rows
      fetch cur_rows into @id,@max
      while @@fetch_status=0
      begin
      select @max = @max -1
      set rowcount @max
      delete from 表名 where 主字段 = @id
      fetch cur_rows into @id,@max
      end
      close cur_rows
      set rowcount 0
    方法二
      有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。  1、对于第一种重复,比较容易解决,使用
     select distinct * from tableName
    如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
     select distinct * into #Tmp from tableName
      drop table tableName
      select * into tableName from #Tmp
      drop table #Tmp
    2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
      假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
    select identity(int,1,1) as autoID, * into #Tmp from tableName
      select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
      select * from #Tmp where autoID in(select autoID from #tmp2)
    最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
      

  3.   

    如果其他字段不能区分大小,只能使用临时表.select id = identity(int,1,1) , * into tb from CMS_viewgoodsListselect a.* from tb a
    (select ProductsNum , min(id) id from tb group by ProductsNum) b
    where a.ProductsNum = b.ProductsNum and a.id = b.id
      

  4.   

    你的主键是ProductsNum吗?如果所有的字段是主键那么结果就是这样.
      

  5.   

    LZ的写法:
    SELECT DISTINCT ProductsNum,huohao,CategoryName1,Category2,Category3,xiaoshou FROM CMS_viewgoodsList where flag=1
    只会将ProductsNum,huohao,CategoryName1,Category2,Category3,xiaoshou都相同的记录去掉。
    LZ想达到什么目的呢?如果有2个ProductsNum一样的记录存在,那么取那条呢?肯定还有筛选条件的。
    如果只是要选出ProductsNum相同的第一个记录,那么用临时表。多加一个标识字段,以创造人为的筛选条件。
    就像老乌龟那样的写法。
      

  6.   

    2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
      假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
    select identity(int,1,1) as autoID, * into #Tmp from tableName
      select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
      select * from #Tmp where autoID in(select autoID from #tmp2)
    最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)这个最简单容易懂哈