【问题标题】:How to group by to get rid of duplicates rows如何分组以消除重复的行
【发布时间】:2011-09-14 00:45:50
【问题描述】:

如何从除 PK 之外的所有列都重要的表中删除重复项。

declare @dummy table
(
   pk int,
   a char(1),
   b char(1),
   c char(1)
)

insert into @dummy 
select 1, 'A', 'B', 'B' union all
select 2, 'A', 'B', 'B' union all
select 3, 'P', 'Q', 'R' union all
select 4, 'P', 'Q', 'R' union all
select 5, 'X', 'Y', 'Z' union all
select 6, 'X', 'Y', 'Z' union all
select 7, 'A', 'B', 'Z' 

我得到的没有区别:

select * from @dummy

pk          a    b    c
----------- ---- ---- ----
1           A    B    B
2           A    B    B
3           P    Q    R
4           P    Q    R
5           X    Y    Z
6           X    Y    Z
7           A    B    Z

我想要的是:

select ... do magic ....

pk          a    b    c
----------- ---- ---- ----
1           A    B    B
3           P    Q    R
5           X    Y    Z
7           A    B    Z

【问题讨论】:

    标签: sql group-by distinct


    【解决方案1】:

    找到了:

    select min(pk), a, b, c 
    from @dummy 
    group by a, b, c
    

    【讨论】:

    • 哈哈,恭喜!我快到了,比我快 11 秒 =)
    【解决方案2】:

    我想你想要这样的东西:

    DELETE FROM f
    FROM @dummy AS f INNER JOIN @dummy AS g
         ON g.data = f.data
              AND f.id < g.id
    

    查看这篇文章:http://www.simple-talk.com/sql/t-sql-programming/removing-duplicates-from-a-table-in-sql-server/

    【讨论】:

      【解决方案3】:

      起初,我认为 distinct 会这样做,但我相当确定你想要的是 group by:

      select * from @dummy group by a,b,c
      

      由于有唯一的主键,所有行都是不同的。

      【讨论】:

        猜你喜欢
        • 2021-01-08
        • 1970-01-01
        • 2019-07-02
        • 2021-10-08
        • 2023-03-26
        • 1970-01-01
        • 2016-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多