2 つのテーブルを使用するビューを作成しようとしています。ここにいくつかの例を示しましたが、唯一の問題は、テーブルのサイズが異なる可能性があることです。
例:
表 A
ID COMPANY_ID FORM_JOURNAL_ID LIQ_GAS_BRAND RETAIL_PRICE WHOLE_SALE_PRICE
-------- ---------- --------------- ------------- ------------ ----------------
11532 733 412 120 15601 0
11445 732 434 120 70 0
11440 730 412 120 10 15
表 B
ID COMPANY_ID FORM_JOURNAL_ID INDIVIDUALS ENTITIES COMPLEX
------ ---------- --------------- ----------- ---------- ------------------
11911 730 412 555 0 777
11913 733 412 0 785 0
11444 733 434 55 0 0
ご覧のとおり、テーブルは COMPANY_ID と FORM_JOURNAL_ID によってバインドされており、テーブル B には COMPANY_ID 733 と FORM_JOURNAL_ID 434 がありますが、テーブル A にはこれらの属性がありません。
すべての情報を表示するには、どのようなアプローチを使用する必要がありますか。つまり、テーブル A にテーブル B にある COMPANY_ID がない場合は、retail_price と whole_sale_price の場所に「0」を表示するだけです。
これまでのところ、両方のテーブルのデータを表示できるクエリを作成できましたが、各テーブルに特定の COMPANY_ID と FORM_JOURNAL_ID に関するデータが含まれている場合のみです。
完全なクエリ
FORM_JOURNAL_ID COMPANY_ID RETAIL WHOLESALE INDIVIDUALS ENTITIES COMPLEX
--------------- ---------- ----------- ---------- ----------- ---------- --------
412 730 10 15 555 0 777
412 731 20 0 99 0 10001
412 733 15601 0 0 785 0
434 730 10 0 0 0 0
434 732 70 0 0 0 0
434 733 0 0 55 0 0
最後の行があるはずですが、そうではありません。
ありがとうございました!
p/s クエリ:
<!-- language: lang-sql -->
select
t1.form_journal_id,
t1.company_id,
max(nvl((decode(t1.liq_gas_brand, 120, t1.retail_price)),0)) as retail,
max(nvl((decode(t1.liq_gas_brand, 120, t1.whole_sale_price)),0)) as wholesale,
max(case when t2.form_journal_id = t1.form_journal_id and t2.company_id = t1.company_id then nvl(t2.individuals, 0) else 0 end) as individuals,
max(case when t2.form_journal_id = t1.form_journal_id and t2.company_id = t1.company_id then nvl(t2.entities, 0) else 0 end) as entities,
max(case when t2.form_journal_id = t1.form_journal_id and t2.company_id = t1.company_id then nvl(t2.ind_energy_complex, 0) else 0 end) as complex
from cs_fact_f43_liq_gas t1, cs_form_journal j, cs_fact_f43_trade_gas t2
group by t1.form_journal_id, t1.company_id
order by t1.form_journal_id