0

基本的に大量のデータをExcelスプレッドシートに大量に生成するさまざまな大きなビュー/ストアドプロシージャがあります。会社の金額がすべて流れていないという問題がありました。私はそれをストアドプロシージャのコードに絞り込みました: (これは簡単にするために省略されていることに注意してください)

 LEFT OUTER JOIN view_creditrating internal_creditrating 
                        ON creditparty.creditparty = 
                           internalrating.company 
          LEFT OUTER JOIN (SELECT company, contract, SUM(amount) amount 
                            FROM   COMMON_OBJ.amount 
                            WHERE  status = 'Active' 
                            GROUP  BY company, contract) col 
                       ON vd.contract = col.contract 

問題のある表:

                    company  | contract | amount |
                             |          |        |
                    TVC      |   NULL   |  1006  |
                    KS       |   10070  | -2345  |
                    NYC-G    |   10060  | 334000 |
                    NYC-G    |   100216 | 4000   |
                    UECR     |   NULL   |     0  |
                    SP       |   10090  | 84356  |

基本的に、一部のコントラクトは NULL です。そのため、契約に LEFT OUTER JOIN があると、契約の null 値がドロップアウトして流れません...だから、会社に基づいてそれを行うことにしました。異なる契約を表示するために会社がテーブル内に複数回表示されるため、これも問題を引き起こします。この変更により、契約 10060 の金額が必要なのか契約 100216 の金額が必要なのかがわからず、多くの場合、間違った金額が返されるため、クエリがあいまいになります。company=company で最後の ON 句を残すことを考えました。これにより、問題が最小限に抑えられます....次に、いくつかのセルにのみ影響するため、一貫性のないセル値ごとに何らかの形で直接クエリを実行します。私は検索しましたが、これが可能だとは思いません。これは可能ですか?? または、データベース側でこれを修正する別の方法はありますか?

4

1 に答える 1

1

あなたが解決したように、問題はON句とその使用NULLにあります。

NULLを変更して照合できる値にする 1 つの方法は、 を使用することですCOALESCE。これにより、句が次のように変更されます。

ON coalesce(vd.contract,'No Contract') = coalesce(col.contract,'No Contract')

これにより、すべてのNULLが 'No Contract' に変わり、NULL=NULLテスト ( NULLを返す) が'No Contract'='No Contract'に変更され、 Trueが返されます。

于 2013-11-04T21:26:00.110 に答える