2015-03-25 91 views
0

以下是表(客户),并记录如下:我想在Oracle表中选择非重复的记录(只选择重复记录)

CUSTID CUSTNAME 
100  ashwin 
100  ashwin 
200  adithyan 
100  ashwin 
300  aravind 
300  aravind 
300  aravind 

我想要的结果是这样(非重复行):

CUSTID CUSTNAME 
100  ashwin 
100  ashwin 
300  aravind 
300  aravind 
+0

想选择非截然不同的行 – Ashwinkumar 2015-03-25 08:11:30

+0

编辑,而不是评论您自己的问题 – Alexander 2015-03-25 08:17:01

+0

@Ashwinkumar如果答案已解决您的问题,请将答案标记为已回答。阅读[当某人回答我的问题时该怎么办?](http://stackoverflow.com/help/someone-answers) – 2015-03-25 09:00:41

回答

0

试试这个:

select custid, custname 
from customer a where 
exists (
select CUSTID, CUSTNAME, count(*) 
from customer b 
where a.custid = b.custid and a.custname = b.custname 
group by CUSTID, CUSTNAME 
having count(*) > 1) 
+0

它给出了具有重复项的所有行的结果。它选择所有3行custid = 100。但我只想要非独特的记录,只有2行custid = 100. – Ashwinkumar 2015-03-25 08:16:59

1

我想要的结果是这样的(非重复行):

CUSTID CUSTNAME 
100  ashwin 
100  ashwin 
300  aravind 
300  aravind 

如果我理解正确的话,你要重复行的其余部分。您可以使用分析ROW_NUMBER

测试用例:

SQL> CREATE TABLE t 
    2  (CUSTID int, CUSTNAME varchar2(8)); 

Table created. 

SQL> 
SQL> INSERT ALL 
    2  INTO t (CUSTID, CUSTNAME) 
    3   VALUES (100, 'ashwin') 
    4  INTO t (CUSTID, CUSTNAME) 
    5   VALUES (100, 'ashwin') 
    6  INTO t (CUSTID, CUSTNAME) 
    7   VALUES (200, 'adithyan') 
    8  INTO t (CUSTID, CUSTNAME) 
    9   VALUES (100, 'ashwin') 
10  INTO t (CUSTID, CUSTNAME) 
11   VALUES (300, 'aravind') 
12  INTO t (CUSTID, CUSTNAME) 
13   VALUES (300, 'aravind') 
14  INTO t (CUSTID, CUSTNAME) 
15   VALUES (300, 'aravind') 
16 SELECT * FROM dual; 

7 rows created. 

SQL> 
SQL> COMMIT; 

Commit complete. 

SQL> 

查询使用ROW_NUMBER

SQL> select custid, custname 
    2 from (
    3 SELECT custid, custname, 
    4   row_number() over (partition by custid order by custid) as rn 
    5 from t 
    6 ) 
    7 WHERE rn > 1 
    8 order by custid; 

    CUSTID CUSTNAME 
---------- -------- 
     100 ashwin 
     100 ashwin 
     300 aravind 
     300 aravind 

SQL> 

使你所需的输出。

+1

是的,它的工作原理非常好,谢谢你的解决方案:-) – Ashwinkumar 2015-03-25 08:27:14

+0

@Ashwinkumar不客气!请标记为已回答,这也会帮助其他人, – 2015-03-25 08:28:36