2014-10-03 114 views
0

我有一个类似下面的表。在Oracle Sql中查找重复值

Id  amount 
-------------- 
10.  12345 
10.  12345 
12.  34567 
13.  34567 

根据我的业务要求,相同数量的同一个id不重复记录。不同的数量是重复的记录。希望你了解这个要求。

在上面的示例记录中,我必须获取重复的金额值及其计数,同时Id应该不同。

预期的查询结果是34567,如果你需要显示的ID以及算作2

回答

2

SELECT a.* 
FROM 
(
    SELECT id, amount, count(1) OVER (PARTITION BY amount) num_dup 
    FROM table1 
)a 
WHERE a.num_dup >1 

更新。如果你只关心不同的ID,使用COUNT(DISTINCT id)代替COUNT(1)

更多的例子
随着加入另一个表

SELECT a.* 
    FROM 
    (
     SELECT a.id, a.amount, 
     count(distinct a.id) OVER (PARTITION BY a.amount) num_dup 
     FROM table1 a 
     INNER JOIN table2 b ON (b.id = a.id)  
    )a 
    WHERE a.num_dup >1 

无窗的功能和无table1.id:

SELECT a.amount, count(distinct a.id) 
FROM table1 a 
INNER JOIN table2 b ON (b.id = a.id) 
GROUP BY a.amount 
HAVING count(distinct a.id) >1 ; 

没有窗函数与table1.id:

SELECT b.* 
FROM 
(
SELECT a.amount, count(distinct a.id) 
FROM table1 a 
INNER JOIN table2 b ON (b.id = a.id) 
GROUP BY a.amount 
HAVING count(distinct a.id) >1 
)a 
INNER JOIN table1 b ON (b.amount = a.amount) 
+0

Thanj你UR响应。你能告诉我什么是使用功能分区 – TMS 2014-10-03 16:07:06

+0

这是一个非常大的话题。检查Oracle文档中的“分析函数”(例如,这里是 - http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions004.htm#SQLRF06174) – a1ex07 2014-10-03 16:10:31

+0

您给出的查询完美工作。但是当我加入时它不起作用。 – TMS 2014-10-03 18:44:23