我正在尝试创建一个使用两个表的视图。我在这里看到了一些示例,但唯一有问题的部分是我的表可以有不同的大小:
例子:
表 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