0

これは、2 つのサブレポートを使用する Crystal レポートの修正の試みです。

3 つのテーブルを結合するクエリがあり、同じ新しいテーブルを取り込むサブ選択のペアを使用したいと考えていました。

スクリプトの 2 つの列のうちの最初の列を次に示します。

SELECT ea."LOC_ID", lo."DESCR", ea."PEGSTRIP", ea."ENTITY_OWNER"
, ea."PCT_OWNERSHIP", ea."BEG_BAL", ea."ADDITIONS", ea."DISPOSITIONS"
, ea."EXPLANATION", ea."END_BAL", ea."NUM_SHARES", ea."PAR_VALUE"
, ag."DESCR", ea."EOY", ea."FAKEPEGSTRIP",
(select sum(htb.END_FNC_CUR_US_GAAP) 
from EQUITY_ACCOUNTS  ea , HYPERION_TRIAL_BALANCE htb
where
htb.PEGSTRIP = ea.PEGSTRIP and
htb.PRD_NBR = 0 and
htb.LOC_ID = ea.LOC_ID and
htb.PRD_YY = ea.EOY 
 ) firstHyp
 FROM   ("TAXPALL"."ACCOUNT_GROUPING" ag 
 INNER JOIN "TAXP"."EQUITY_ACCOUNTS" ea 
 ON (ag."ACCT_ID"=ea."PEGSTRIP") AND (ag."EOY"=ea."EOY")) 
 INNER JOIN "TAXP"."LOCATION" lo ON ea."LOC_ID"=lo."LOC_ID"
 WHERE  ea."EOY"=2009
 ORDER BY ea."LOC_ID", ea."PEGSTRIP"

これがデータセットを配信するとき、「firstHyp」の値は pegstrip 値によって変更されません。結合の単一の合計を返し、ペグストリップで適切な値を入力できません。where句が結合を1行ずつ拾っていると思いました。

私は Oracle 構文を頻繁に使用しないので、ここで何が欠けているのでしょうか?

ティア

4

2 に答える 2

1

SQL は次のものと同等です。

SELECT ea."LOC_ID", lo."DESCR", ea."PEGSTRIP", 
       ea."ENTITY_OWNER" , ea."PCT_OWNERSHIP", 
       ea."BEG_BAL", ea."ADDITIONS", ea."DISPOSITIONS" , 
       ea."EXPLANATION", ea."END_BAL", ea."NUM_SHARES", 
      ea."PAR_VALUE" , ag."DESCR", ea."EOY", ea."FAKEPEGSTRIP",
     (select sum(htb.END_FNC_CUR_US_GAAP) 
      from EQUITY_ACCOUNTS iea  
         Join HYPERION_TRIAL_BALANCE htb 
            On htb.PEGSTRIP = iea.PEGSTRIP
              and htb.LOC_ID = iea.LOC_ID 
              and htb.PRD_YY = iea.EOY
      where htb.PRD_NBR = 0 ) firstHyp 
FROM "TAXPALL"."ACCOUNT_GROUPING" ag 
    JOIN "TAXP"."EQUITY_ACCOUNTS" ea 
        ON ag."ACCT_ID"=ea."PEGSTRIP" 
            AND ag."EOY"=ea."EOY"
    JOIN "TAXP"."LOCATION" lo
        ON ea."LOC_ID"=lo."LOC_ID" 
WHERE ea."EOY"=2009
ORDER BY ea."LOC_ID", ea."PEGSTRIP"

firstHyp を生成するサブクエリは、外側のクエリのテーブルにまったく依存していないことに注意してください...したがって、相関サブクエリではありません...つまり、生成される値は、外側のクエリの行ごとに異なりません。結果セット、それはすべての行で同じになります。サブクエリに何かを入れて、外部クエリのある行の値に依存させ、相関サブクエリになり、各外部行に対して何度も実行されるようにする必要があります....

また、サブセレクトのペアについて言及していますが、1つしか表示されません。もう一方はどこですか?

于 2010-01-20T00:47:38.397 に答える
0

使用する:

   SELECT ea.LOC_ID, 
          lo.DESCR, 
          ea.PEGSTRIP, 
          ea.ENTITY_OWNER, 
          ea.PCT_OWNERSHIP, 
          ea.BEG_BAL, 
          ea.ADDITIONS, 
          ea.DISPOSITIONS, 
          ea.EXPLANATION, 
          ea.END_BAL, 
          ea.NUM_SHARES, 
          ea.PAR_VALUE, 
          ag.DESCR, 
          ea.EOY, 
          ea.FAKEPEGSTRIP,
          NVL(SUM(htb.END_FNC_CUR_US_GAAP), 0) AS firstHyp
     FROM TAXPALL.ACCOUNT_GROUPING ag 
     JOIN TAXP.EQUITY_ACCOUNTS ea ON ea.PEGSTRIP = ag.ACCT_ID
                                 AND ea.EOY = ag.EOY 
                                 AND ea.EOY = 2009
     JOIN TAXP.LOCATION lo ON lo.LOC_ID = ea.LOC_ID
LEFT JOIN HYPERION_TRIAL_BALANCE htb ON htb.PEGSTRIP = ea.PEGSTRIP
                                    AND htb.LOC_ID = ea.LOC_ID 
                                    AND htb.PRD_YY = ea.EOY
                                    AND htb.PRD_NBR = 0
 GROUP BY ea.LOC_ID, 
          lo.DESCR, 
          ea.PEGSTRIP, 
          ea.ENTITY_OWNER, 
          ea.PCT_OWNERSHIP, 
          ea.BEG_BAL, 
          ea.ADDITIONS, 
          ea.DISPOSITIONS, 
          ea.EXPLANATION, 
          ea.END_BAL, 
          ea.NUM_SHARES, 
          ea.PAR_VALUE, 
          ag.DESCR, 
          ea.EOY, 
          ea.FAKEPEGSTRIP,
 ORDER BY ea.LOC_ID, ea.PEGSTRIP

SELECT 句の元の SELECT は相関していないという Charles Bretana の評価に同意します。これが、値が行ごとに変化しなかった理由です。ただし、サブ SELECTEQUITY_ACCOUNTSは、メイン クエリの基礎となるテーブルを使用しました。そこで、結合を削除し、.HYPERION_TRIAL_BALANCEを使用してテーブルをメイン クエリに組み込みましたLEFT JOIN。SUM をラップするのは、NVLこれCOALESCEが対象とする Oracle のバージョンがわからなかったからです。

于 2010-01-20T04:36:51.957 に答える