0

このようなオラクルレポートビルダーでマトリックスレポートを作成しました

ここに画像の説明を入力

そして、これがレポートが呼び出されている私のクエリです

SELECT A.p_date,
       L.sup_name,
       Decode(A.perc_typ, 1, 'Buff',
                          2, 'Cow')     PERC_TYPE,
       A.sup_rate                       RATE,
       Decode(A.perc_typ,
       1, Round(( Nvl(A.fat_perc, 0) * Nvl(A.gross_vol, 0) ) / 6, 5),
       2, Round(
          ( Nvl(A.fat_perc, 0) + (
            ( Nvl(A.fat_perc, 0) * 0.22 ) + (
            Nvl(A.lr_perc, 0) * 0.25 ) + 0.72 ) ) *
          Nvl(A.gross_vol, 0) / 13, 5)) VOL
FROM   mlk_purchase A,
       supplier L
WHERE  A.sup_cod = L.sup_cod
       AND A.p_date <= Trunc(SYSDATE)
       AND a.p_date >= Trunc(SYSDATE) - 7
ORDER  BY 1 

問題は、クエリからデータが取得されていない空のセルが表示されることです。空のスペースではなくゼロのセルを表示したい。Oracle Report Builderでこれを行う方法はありますか.

4

1 に答える 1

0

少なくとも 2 つの解決策があります。

解決策 1 -- Oracle Reports で、ゼロを表示するボイラープレート テキスト オブジェクトを作成し、このオブジェクトがマトリックス フィールドの後ろに表示されるように配置します。このようにして、フィールドが表示されているときはボイラープレートが非表示になりますが、フィールドが表示されていないときは表示されます。この解決策はドキュメントに記載されています。

解決策 2 -- データのない行フィールドと列フィールドの組み合わせに対して値がゼロの行を返すようにクエリを書き直します。たとえば、マトリックスの行フィールドと列フィールド (この場合はサプライヤーと日付) のすべての可能な組み合わせを見つけ、データを組み合わせに外部結合し、NVL を使用して null 値をゼロに変換します。次のようになります。

SELECT
    L.P_DATE,
    L.SUP_NAME,
    DECODE(A.PERC_TYP, 1, 'Buff', 2, 'Cow') PERC_TYPE,
    A.SUP_RATE RATE,
    NVL
    (
        DECODE
        (
            A.PERC_TYP, 
            1, 
            ROUND
            (
                (NVL(A.FAT_PERC, 0) * NVL(A.GROSS_VOL, 0)) / 6,
                5
            ),
            2,
            ROUND
            (
                (NVL(A.FAT_PERC, 0) + 
                    (
                        (NVL(A.FAT_PERC, 0) * 0.22) + 
                        (NVL(A.LR_PERC, 0) * 0.25) + 0.72)
                    ) * NVL(A.GROSS_VOL, 0) / 13,
                5
            )
        ),
        0
    ) VOL
FROM
    MLK_PURCHASE A,
    (
        SELECT
            L1.SUP_CODE,
            L1.SUP_NAME,
            L2.P_DATE
        FROM
            (
                SELECT DISTINCT 
                    SUPPLIER.SUP_CODE, 
                    SUPPLIER.SUP_NAME 
                FROM 
                    SUPPLIER
            ) L1,
            (
                SELECT DISTINCT
                    MLK_PURCHASE.P_DATE
                FROM
                    MLK_PURCHASE
                WHERE
                    MLK_PURCHASE.P_DATE <= TRUNC(SYSDATE)
                    AND
                    MLK_PURCHASE.P_DATE >= TRUNC(SYSDATE) - 7
            ) L2
    ) L
WHERE 
    A.SUP_COD (+) = L.SUP_COD
    AND
    A.P_DATE (+) = L.P_DATE
ORDER BY
    1 

クエリを書き直して同じ効果を得るより効率的な (そして簡単な) 方法は、 と の間でパーティション化された外部結合を使用することかもしれませんが、お使いのバージョンの Oracle Reports がこの構文をどの程度サポートしているかはわかりません。MLK_PURCHASESUPPLIERSUP_CODE

于 2013-04-08T15:41:53.693 に答える