0

このSQLクエリに基づいて、Crystal Reports 11でレポートを作成しようとしています

SELECT *
    FROM (テーブル) OM, (テーブル) OL, (テーブル) C
    WHERE OM.ORDER = OL.ORDER
    AND OM.COMPANY = C.COMPANY
    AND (EXISTS (SELECT *
            FROM (テーブル) OSD, (テーブル) OSDD
            WHERE OSD.ORDER = OL.ORDER
            AND OSD.LINE = OL.LINE
            AND OSD.REVISION = OL.REVISION
            AND OSD.DIM = OSDD.DIM
            AND OSDD.SHAPE = OL.SHAPE))

最初の 2 つのテーブルを使用してメイン レポートを作成し、クエリの「EXISTS」セクションを使用してサブレポートを作成し、メイン レポートにリンクすることから始めるのが最善の方法だと思いました。

詳細セクションには、メイン レポートとサブレポートの両方のデータが含まれています。サブレポートが値を返す場所については正しい結果が返されますが、サブレポートが null の場合はメイン レポートの詳細セクションを非表示にしたいのですが、いずれかでサブレポートを参照する方法が見つかりません。選択式。

このクエリを模倣するより良い方法があれば、提案をお待ちしています。

4

2 に答える 2

1

サブレポートが null であるデータを表示したくない場合、サブレポートを使用する理由はありません。レポートを複雑にしすぎています。

それでもこれを行いたい場合は、Suppress 属性で式を使用できます。グローバル変数を使用し、サブレポートに基づいて変数を設定する必要がある可能性がありますが、行が表示される前に設定されるとは思えません。

于 2009-08-07T20:36:59.323 に答える
0

どのタイプのデータベースを使用しているかはわかりませんが、おそらく次のようなものを使用できると思います。

select * --you probably should narrow this down instead of using a *
from (table) OM
inner join (table) OL on OM.ORDER = OL.ORDER
inner join (table) C on OM.COMPANY = C.COMPANY
inner join (table) OSD on OSD.ORDER = OL.ORDER 
    and OSD.LINE = OL.LINE 
    and OSD.REVISION = OL.REVISION
    and OSD.DIM = OSDD.DIM
inner join (table) OSDD on OSDD.SHAPE = OL.SHAPE

これは私の思いつきであり、テストされていませんが、一致が見つかった OM、OL、C、OSD、および OSDD のすべてのレコードが表示されるという考えです。OSD または OSDD で左結合を使用していないため、null 行はありません。

ただし、次のような左外部結合にいつでも変更できます。

select * --you probably should narrow this down instead of using a *
from (table) OM
inner join (table) OL on OM.ORDER = OL.ORDER
inner join (table) C on OM.COMPANY = C.COMPANY
left outer join (table) OSD on OSD.ORDER = OL.ORDER 
    and OSD.LINE = OL.LINE 
    and OSD.REVISION = OL.REVISION
    and OSD.DIM = OSDD.DIM
left outer join (table) OSDD on OSDD.SHAPE = OL.SHAPE

これにより、OM、OL、および C からのすべての行と、一致が見つかった OSD および OSDD からの行のみが得られます。次に、表示したくない行を抑制するためのオプションがいくつかあります。たとえば、rexem が提案したように、セクション エキスパートで抑制式を使用するなどです。

お役に立てれば。

于 2009-08-07T22:01:37.263 に答える