Oracle Sql;在两行或更多行中查找相同的列值组合

时间:2014-09-01 15:48:47

标签: sql oracle

我的查询需要一些帮助。一直在寻找年龄,但不能提出正确的sql语句。

这是我的表 DRAFT DFT (只有1个表,这些都是列)

RowID|SID Number|Column C|RELS Number|Column E|Dr Number |Column G |
1------ |  23101-----    |21-8-2014| 22234 -----  | UNR---------| 14243-----|2
2------ |  23101 -----   |22-8-2014| 22234 -----  | UNS---------| 14243 ---| 2
3------ |  23101------    |28-8-2014| 22232 -----  | FRE ---------| 14243 ---| 2

我需要的是以下内容:

我需要选择所有行和&列 SID Number和 RELS Number中的值组合的表的列值是重复的,因此我必须看到的是以下两行:

1------ | 23101----- |21-8-2014| 22234 ----- | UNR---------| 14243-----|2
2------ | 23101 ----- |22-8-2014| 22234 ----- | UNS---------| 14243 ---| 2

而不是这个:

1------ | 23101----- |21-8-2014| 22234 ----- | UNR---------| 14243-----|2
2------ | 23101 ----- |22-8-2014| 22234 ----- | UNS---------| 14243 ---| 2
**3------ | 23101------ |28-8-2014| 22232 ----- | FRE ---------| 14243 ---| 2**

因为 SID Number和 RELS Number的组合不重复。

我知道Dr号的列值在所有3行中都是相同的。

这对我的sql语句有用吗?

这是我的陈述:

SELECT *
FROM DRAFT DFT 
INNER JOIN (SELECT SID Number,RELS Number, COUNT(*) AS "TOTALCOUNT
            FROM DRAFT DTF1GROUP BY SID Number,RELS Number
            HAVING COUNT (*)>1
           ) B ON DTF.SID Number=B.SID Number AND DTF.RELS Number=B.RELS Number

1 个答案:

答案 0 :(得分:2)

只需使用分析函数:

select d.*
from (select d.*, count(*) over (partition by sid, rels) as cnt
      from draft
     ) d
where cnt > 1;