往with as中写入数据的方法

方法1:直接写入,使用union all,简单直观,但程序运行效率低,几百条就很慢了

with dw_wms_outbound_info_v100 as(
  select '10700001' as order_no, '0011' as shop_no, '5501' as product_code, '2020-07-31' as order_date, 10 as payment_amount union all
  select '10700001' as order_no, '0011' as shop_no, '5502' as product_code, '2020-08-01' as order_date, 90 as payment_amount union all
  select '10700002' as order_no, '0011' as shop_no, '5501' as product_code, '2020-08-02' as order_date, 20 as payment_amount union all
  select '10700002' as order_no, '0011' as shop_no, '5503' as product_code, '2020-08-02' as order_date, 30 as payment_amount union all
  select '10700003' as order_no, '0011' as shop_no, '5501' as product_code, '2020-08-02' as order_date, 20 as payment_amount union all
  select '10700004' as order_no, '0012' as shop_no, '6601' as product_code, '2020-07-31' as order_date, 40 as payment_amount union all
  select '10700004' as order_no, '0012' as shop_no, '6601' as product_code, '2020-08-01' as order_date, 50 as payment_amount
)
  
, dim_store_info_v100 as (
  select '0011' as shop_no, '北京一店' as shop_name  union all
  select '0012' as shop_no, '北京二店' as shop_name 
)
  
, dim_sku_info_v100 as (
  select '5501' as product_code, '可乐350ml' as product_name  union all
  select '5502' as product_code, '雪碧500ml' as product_name  union all
  select '5504' as product_code, '芬达243ml' as product_name  union all
  select '6601' as product_code, '巧克力'    as product_name 
)
 
---------------------上面的SQL不要动-----在下面写自己的SQL--------------------
 
select
  t1.dt,
  t1.order_no,
  t1.shop_no,
  t2.shop_name,
  t1.product_code,
  t3.product_name,
  t1.order_date,
  t1.payment_amount
from dw_wms_outbound_info_v100 t1
left join dim_store_info_v100 t2 on t2.dt = '20200901' and t1.shop_no = t2.shop_no
left join dim_sku_info_v100 t3 on t3.dt = '20200901' and t1.product_code = t3.product_code

 

方法2:使用struct写入,然后列转行。效率比方法1高

with t_temp01 as (SELECT lv.* 
FROM   (SELECT 0) t 
lateral VIEW inline(array(
struct('A',10,'AAA'),
struct('B',20, 'BBB'),
struct('B',300, 'CCC') 
)) lv AS col1, col2, col3)
select col1 from t_temp01 where col1 = 'B'

 

posted @ 2020-10-19 17:40  emilynotes  阅读(401)  评论(0编辑  收藏  举报