Sql 仅选择基于少数列的重复记录
我有一个有三列的表。它在第2列和第3列上有重复项。我需要只选择重复的行(包括所有3列)。怎么做?请帮帮我Sql 仅选择基于少数列的重复记录,sql,sql-server,Sql,Sql Server,我有一个有三列的表。它在第2列和第3列上有重复项。我需要只选择重复的行(包括所有3列)。怎么做?请帮帮我 var1 var2 var3 a b a c a a d b 电子商务 以上是表格结构。它有3个列n var1,var2,var3。仅基于var2和var3列,我们必须假设它是重复记录。我们不应该考虑VAR1,而找到副本。对不起,路线不对 我使用了下面的查询来获取所有行,其中包含/不包含重复的行,但是使用秩来标识重复的记录。但我不能只得到重复的记录 选择var1、var2、var3、行号()
var1 var2 var3
a
b a
c a a
d b
电子商务
以上是表格结构。它有3个列n var1,var2,var3。仅基于var2和var3列,我们必须假设它是重复记录。我们不应该考虑VAR1,而找到副本。对不起,路线不对
我使用了下面的查询来获取所有行,其中包含/不包含重复的行,但是使用秩来标识重复的记录。但我不能只得到重复的记录
选择var1、var2、var3、行号()覆盖(按分区)
var2,var3由var2,var3)作为rnk订购
来自vart
除此之外,我如何获得重复条目中的最大排名记录?
谢谢。您的主键是什么?如果var1是,请尝试:
select var1
from vart
group by var2+var3
having count(*)>1
如果不是,请尝试:
select * from vart where pk in
(
select pk
from vart
group by var2+var3
having count(*)>1
)
如果您想要所有重复的行,可以使用
count(*)over()
结果:
var1 var2 var3
---- ---- ----
a a a
b a a
c a a
var1 var2 var3
---- ---- ----
b a a
c a a
如果您想要所有副本,但只需要一个,请使用行号()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
结果:
var1 var2 var3
---- ---- ----
a a a
b a a
c a a
var1 var2 var3
---- ---- ----
b a a
c a a
使用您的查询,您可以使用CTE展开它并执行您想要的操作
with cte as
(
select var1,var2,var3,ROW_NUMBER() over(PARTITION BY var2,var3 order by var2,var3) as rnk from vart
)
select * from cte where rnk > 1
这将列出所有“重复”行
您也可以使用cte删除复制:
with cte as
(
select ROW_NUMBER() over(PARTITION BY var2,var3 order by var2,var3) as rnk from vart
)
delete from cte where rnk > 1
列“vart.var1”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。请修改查询。但这可能有点低效。我不知道如何在in子句中有多个字段