Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择具有一个唯一id和第二个不同唯一id的重复行_Sql_Oracle - Fatal编程技术网

Sql 选择具有一个唯一id和第二个不同唯一id的重复行

Sql 选择具有一个唯一id和第二个不同唯一id的重复行,sql,oracle,Sql,Oracle,假设您有这个表: ID | DOC | DOC_ID | TYPE 1 | A | B | A 2 | A | B | B 3 | BB | CC | A 4 | BB | DD | A 5 | E | F | A 6 | E | F | B 7 | E | F |

假设您有这个表:

ID  |   DOC |   DOC_ID  |   TYPE
1   |   A   |   B       |   A
2   |   A   |   B       |   B
3   |   BB  |   CC      |   A
4   |   BB  |   DD      |   A
5   |   E   |   F       |   A
6   |   E   |   F       |   B
7   |   E   |   F       |   B
8   |   G   |   H       |   A
9   |   G   |   I       |   A
10  |   G   |   I       |   B
11  |   G   |   H       |   B
我需要将此表中的信息与所有这些信息结合起来:

  • 单据字段必须相同
  • 文档ID字段必须不同
  • 每个文档注册表有2行以上
如何获得像下一个表一样的信息

ID  |   DOC |   DOC_ID  |   TYPE
3   |   BB  |   CC      |   A
4   |   BB  |   DD      |   A
10  |   G   |   I       |   B
11  |   G   |   H       |   B

我试着用Group by、count(doc_id)来做,但没有得到结果

我在考虑窗口函数。以下是您描述的规则:

select t.*
from (select t.*,
             row_number() over (partition by doc, doc_id order by doc_id) as seqnum,
             count(*) over (partition by doc) as cnt
      from t
     ) t
where seqnum = 1 and cnt >= 2;
我认为这些是你想要的规则:

select t.*
from (select t.*,
             row_number() over (partition by doc, doc_id order by doc_id) as seqnum,
             count(distinct doc_id) over (partition by doc) as cnt
      from t
     ) t
where seqnum = 1 and cnt >= 2;

什么是医生登记簿?BB怎么会在这样的寄存器中有两行以上?对不起,我的英语不好,这意味着每个文档值有两行谢谢你的回答,如果我想去掉“文档”列中的空值,我该怎么办?@yulian6766。您的示例数据没有
NULL
值,因此我真的不知道您指的是什么。但是
其中doc不为空