从表中选择重复数据

时间:2017-03-14 05:08:19

标签: sql sql-server duplicates

查询

var total : Total? = Total()
total?.printsum(valueone: 10,valuetwo: 15)
print(total!.sum)
total = nil
print(mainTotal.sum)

enter image description here

我想选择*具有重复数据的数据,知道我的查询无效的原因吗?

以下是我的预期结果..

enter image description here

4 个答案:

答案 0 :(得分:4)

您可以使用窗口函数count来查找每个id和引用的行数,然后进行过滤以获取计数大于1的行。

;with cte as (
    select t.*, count(*) over (partition by id, reference) cnt
    from table1 t
)
select * from cte where cnt > 1;

Demo

在上面的解决方案中,我假设name和id具有一对一的对应关系(根据您给定的数据,这是真的)。如果不是这种情况,请在partition by子句中添加名称:

;with cte as (
    select t.*, count(*) over (partition by name, id, reference) cnt
    from table1 t
)
select * from cte where cnt > 1;

答案 1 :(得分:1)

我可能通过使用带有GROUP BY的子查询来实现此目的:

SELECT t1.*
FROM table1 t1
INNER JOIN
(
    SELECT Name, ID, reference
    FROM table1
    GROUP BY Name, ID, reference
    HAVING COUNT(*) > 1
) t2
    ON t1.Name = t2.Name AND
       t1.ID   = t2.ID   AND
       t1.reference = t2.reference

在这里演示:

Rextester

答案 2 :(得分:1)

试试这个),首先我按分区计算,之后我得到一个带计数的行> 1

select No, Name, ID, Reference 
from (select count(*) over (partition by name, ID, reference) cnt, table1.* from table1) 
where cnt>1

答案 3 :(得分:0)

简单的方法(尽管可能不是性能最佳)将是:

select * from table1 where reference in (
    select reference from table1 group by reference having count(*)>1
)

在子选择中,您拥有重复的数据,在outter选择中,您拥有这些参考的所有数据。