我有一个零件编号(PN)的对照表。有2列,PN和ALT_PN。所有零件编号相互参照。
我需要创建一个仅显示此表中唯一值的报告。例如,仅显示A具有B的替代项,而不显示B是A的替代项。
我找到了适用于Mysql的解决方案,但是它们在Oracle 11g中不起作用。
Create table temp ( id integer primary key, PN varchar(10), Alt_PN
varchar(10));
insert into temp values(1,'A','B');
insert into temp values(2,'B','A');
insert into temp values(3,'X','Y');
insert into temp values(4,'Y','X');
insert into temp values(5,'C','D');
insert into temp values(6,'C','E');
insert into temp values(7,'D','C');
insert into temp values(8,'D','E');
insert into temp values(9,'E','C');
insert into temp values(10,'E','D');
我只想返回ID 1、3、5、6和8
答案 0 :(得分:0)
如果彼此交叉引用,请执行以下操作:
select t.*
from temp t
where t.pn < t.alt_pn;
这将返回每对中的一行,并且适用于任何类型。
如果您担心不是所有的配对都存在,则可以执行以下操作:
select t.*
from (select t.*,
row_number() over (partition by least(t.pn, t.alt_pn), least(t.pn, t.alt_pn) order by t.pn) as seqnum
from t
) t
where seqnum = 1;