2

Oracleでは、複数の行が返される原因となった結合が原因で行が表示されているだけかどうかを判断する方法はありますか?

説明します:

この例では、SOとPOの2つのテーブルがあります。

SOはドライビングテーブルであり、POに参加します。POは、SOごとに複数のレコードを返すことができます。これは望ましいことですが、結果セットのSOレコードが複製されているかどうかを示す列が必要です(PO結合によって複製が発生したためにのみ表示されているように)。

Crystal Reportsでこの識別子を使用して、レポートのフィールドの前半を抑制したいと思います。これは、複数回表示する必要のない重複データであるためです。

また、このデータに対していくつかのグループ化を実行していることも追加する必要があります。これは、グループ化に追加しない限り、大量のデータを実行できないことを意味します。これは実行できません。

4

1 に答える 1

1

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

そして、行の SO.* 出力を抑制しますr > 1

更新:必ずしも結合条件で分割する必要はありません。抑制したいもので分割します。

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. 

この場合、複数の列に対して複数の分析が必要になり、費用がかかります

于 2012-11-26T04:51:30.893 に答える