仅根据少数列选择重复记录

Rob*_*ave 2 sql sql-server

我有一个3列的表.它在第2列和第3列上有重复.我需要选择pnly重复行(包含所有3列).怎么做?请帮助我.

var1 var2 var3

a a a
b a a
c a a
d b b
e c c

以上是表结构.它有3个columsn var1,var2,var3.仅基于列var2和var3,我们必须假设它是重复记录.我们不应该在找到副本时考虑var1.对不起对齐.

我已经使用下面的查询来获取所有具有/不具有重复的行,但具有用于标识重复记录的等级.但我不能只获得重复的记录.

select var1,var2,var3,ROW_NUMBER() over(PARTITION BY var2,var3 order by var2,var3) as rnk from vart

除此之外,我如何在重复的条目中获得最大排名记录?谢谢.

Mik*_*son 9

如果您希望所有具有重复项的行都可以使用count(*) over()

select var1, var2, var3
from (
      select var1,
             var2,
             var3,
             count(*) over(partition by var2, var3) as dc
      from YourTable
     ) as T
where dc > 1
Run Code Online (Sandbox Code Playgroud)

结果:

var1 var2 var3
---- ---- ----
a    a    a
b    a    a
c    a    a
Run Code Online (Sandbox Code Playgroud)

如果你想要所有重复项,而是使用一个副本row_number() over().

select var1, var2, var3
from (
      select var1,
             var2,
             var3,
             row_number() over(partition by var2, var3 order by var1) as rn
      from YourTable
     ) as T
where rn > 1
Run Code Online (Sandbox Code Playgroud)

结果:

var1 var2 var3
---- ---- ----
b    a    a
c    a    a
Run Code Online (Sandbox Code Playgroud)