【问题标题】:Oracle sql, filling the missing values in the join between the table and the dictionaryoracle sql,填充表和字典连接中的缺失值
【发布时间】:2022-01-12 10:19:48
【问题描述】:

请求帮助解决问题,如下图示例:

例子:

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    在“outer join”子句之后使用“partition by”claude 的数据密集化技术非常方便。

    select s.sales_man, nvl(s.name, d.name) name, nvl(s.sales, 0)sales, d.sort_order
    from dict d
    left join sales s
        partition by (s.sales_man)
    on d.name = s.name
    order by s.sales_man, d.sort_order
    ;
    

    demo on db<>fiddle

    【讨论】:

    • 感谢您的帮助。有大量记录时查询效率更高。
    【解决方案2】:

    这是一种选择;在代码中读取 cmets。

    SQL> with
      2  -- sample data
      3  dict (name, sort_order) as
      4    (select 'brasil' , 1 from dual union all
      5     select 'italy'  , 2 from dual union all
      6     select 'germany', 3 from dual
      7    ),
      8  sales (sales_man, name, sales) as
      9    (select 100, 'brasil' , 100 from dual union all
     10     select 100, 'italy'  ,  50 from dual union all
     11     select 200, 'germany',  20 from dual union all
     12     select 200, 'brasil' ,  20 from dual
     13    ),
     14  --
     15  temp as
     16    -- all combinations of DICT X SALES
     17    (select distinct d.name, s.sales_man, d.sort_order
     18     from dict d cross join sales s
     19    )
     20  -- finally:
     21  select t.sales_man, t.name, nvl(s.sales, 0) sales, t.sort_order
     22  from temp t join dict d  on t.name = d.name
     23         left join sales s on s.name = t.name and s.sales_man = t.sales_man
     24  order by t.sales_man, t.sort_order;
    
     SALES_MAN NAME         SALES SORT_ORDER
    ---------- ------- ---------- ----------
           100 brasil         100          1
           100 italy           50          2
           100 germany          0          3
           200 brasil          20          1
           200 italy            0          2
           200 germany         20          3
    
    6 rows selected.
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 2019-11-18
      • 2021-08-25
      • 1970-01-01
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      • 2012-10-25
      相关资源
      最近更新 更多