繁体   English   中英

Oracle-确定行是否是联接返回多于1行的结果

[英]Oracle- Determine if row is a result of a join returning more than 1 row

在Oracle中,他们是否有办法确定是否仅由于联接导致返回多于一行的行而显示行?

我会解释:

在此示例中,我有2个表,例如SO和PO。

SO是驱动表,并加入PO。 每个SO PO可以返回1条以上的记录。 这是所希望的,但是我希望能够有一个列来指示结果集的SO记录是否重复(如上所示,仅是因为PO连接导致它重复)。

我想在Crystal Reports中使用此标识符来取消显示报表中字段的前半部分,因为这是重复的数据,不需要重复显示。

我还应该补充一点,我正在对该数据进行一些分组,我刚刚意识到这意味着除非将它们添加到分组依据,否则我将无法做大量工作,而我不能这样做。

row_number() over(partition by SO.join_id order by PO.something) as r

并抑制r > 1行的SO。*输出。

更新:您不必按连接条件进行分区。 通过您想压制的内容进行分区。

 
 
 
  
  13:35:44 SYSTEM@dwal> ed Wrote file S:\\\\tools\\buffer.sql 1 select decode(rn, 1, owner) owner, object_type, cnt 2 from ( 3 select owner, object_type, count(*) cnt, 4 row_number() over(partition by owner order by owner, object_type desc) rn 5 from dba_objects 6 where owner in( 'SYSTEM', 'OUTLN') 7 group by owner, object_type 8* ) 13:36:09 SYSTEM@dwal> / </s> OWNER OBJECT_TYPE CNT -------- ------------------- ---------- OUTLN TABLE 3 PROCEDURE 1 LOB 1 INDEX 5 SYSTEM VIEW 14 TYPE 1 TRIGGER 2 TABLE PARTITION 47 TABLE 159 SYNONYM 8 SEQUENCE 20 QUEUE 4 PROCEDURE 1 PACKAGE BODY 1 PACKAGE 1 LOB 23 INDEX PARTITION 72 OWNER OBJECT_TYPE CNT -------- ------------------- ---------- INDEX 239 18 rows selected.
 
  

在这种情况下,您将需要对多个列进行多次分析,这很昂贵

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM