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不为空
。