一个表有订单号、客户编号、产品编号、件数、下单日期,订单号不重复,一张订单可以有多个产品,有时候业务员对同个客户下两张一样的单子,即订单重复,怎么把重复的订单筛选出来啊?数据表如下:其中**001与**003即为重复订单,如何通过查询找出来呢? 订单号       客户编号        产品编号        件数         下单日期 
**001        240021        1101          10          2007-10-25 
**001       240021        2101          20          2007-10-25 
**001       240021        3512          5           2007-10-25 **002       240522        1101          10          2007-10-25 
**002       240522        2111          5           2007-10-25 **003       240021        1101          10          2007-10-25 
**003       240021        2101          20          2007-10-25 
**003       240021        3512          5           2007-10-25 **004       240212        1101          10          2007-10-25 **005       240021        2101          10          2007-10-25 **006       250021        1101          10          2007-10-25 
**006       250021        2101          20          2007-10-25 
**006       250021        3512          5           2007-10-25 

解决方案 »

  1.   

    只能选出哪个订单号有重复,或者哪此订单记录有重复记录. 健信息不足,无法确定保留或删除哪一条.若给定规则比如相同记录保留最上面的或最下面的,那么可以借助临时表的identity的处理.select 订单号 from tb group by 订单号 having count(distinct checksum(客户编号,产品编号,件数,日期)) != count(*)要选出所有这样的记录, 那么再连次表, 或者用 where 订单号=(上面的查询语句)即可.
      

  2.   

    select ...
    from tablename as a join tablename as b
         on a.客户编号 = b.客户编号 and
            a.产品编号 = b.产品编号 and
            a.件数     = a.件数 and
            a.下单日期 = b.下单日期
      

  3.   

    我的语句是这样的:
    SELECT 订单表.客户编号, 订单表.产品编号, 订单表.件数, 订单表.订单号
    FROM 订单表
    WHERE (((订单表.客户编号) In (SELECT [客户编号] FROM [订单表] As Tmp GROUP BY [客户编号],[产品编号],[件数] HAVING Count(*)>1  And [产品编号] = [订单表].[产品编号] And [件数] = [订单表].[件数])))
    ORDER BY 订单表.订单号;运行结果如下:
    订单号       客户编号        产品编号        件数         下单日期   
    **001        240021        1101          10          2007-10-25   
    **001       240021        2101          20          2007-10-25   
    **001       240021        3512          5           2007-10-25   **003       240021        1101          10          2007-10-25   
    **003       240021        2101          20          2007-10-25   
    **003       240021        3512          5           2007-10-25**004       240212        1101          10          2007-10-25  多了**004这张订单出来,这张订单只有一种产品,客户也和前面不一样,明显不是重复订单,应该怎样修改这个查询语句呢?
      

  4.   

    我在1楼给你写过了.select * from tb a where exists
    (
    select 1 from tb where 订单号!a.订单号 and checksum(客户编号,产品编号,件数,日期)=checksum(a.客户编号,a.产品编号,a.件数,a.日期))
    )