我想在Oracle表中选择非重复的记录(只选择重复记录)
以下是表(客户),并记录如下:我想在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
试试这个:
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)
它给出了具有重复项的所有行的结果。它选择所有3行custid = 100。但我只想要非独特的记录,只有2行custid = 100. – Ashwinkumar 2015-03-25 08:16:59
我想要的结果是这样的(非重复行):
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>
使你所需的输出。
是的,它的工作原理非常好,谢谢你的解决方案:-) – Ashwinkumar 2015-03-25 08:27:14
@Ashwinkumar不客气!请标记为已回答,这也会帮助其他人, – 2015-03-25 08:28:36
想选择非截然不同的行 – Ashwinkumar 2015-03-25 08:11:30
编辑,而不是评论您自己的问题 – Alexander 2015-03-25 08:17:01
@Ashwinkumar如果答案已解决您的问题,请将答案标记为已回答。阅读[当某人回答我的问题时该怎么办?](http://stackoverflow.com/help/someone-answers) – 2015-03-25 09:00:41