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

时间:2012-11-26 04:42:33

标签: sql oracle

在Oracle中,他们是否有任何方法可以确定是否只显示一行是因为连接导致多于一行的返回?

我会解释:

我有2个表,比如说这个例子的SO和PO。

SO是驾驶表,并加入PO。 PO每个SO可以返回超过1个记录。这是理想的,但是我希望能够有一个列来指示结果集的SO记录是否重复(因为只显示因为PO连接导致它重复)。

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

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

1 个答案:

答案 0 :(得分:1)

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. 

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