相关文章推荐
打盹的黑框眼镜  ·  winapi - use python ...·  11 月前    · 
无聊的汉堡包  ·  js nbsp ...·  1 年前    · 
买醉的闹钟  ·  Delphi SqLite Date ...·  1 年前    · 

SQL工作应用 - 实现excel行列标题转置功能

实际工作中遇到过,要求将图①表格中的行标题(字段名)与列标题(日期)转置成图②样式 并将字段名替换成中文,以方便使用者研究

图①
图②

使用 hive 实现以上功能,需要依赖中间表,具体可分成两步 ——

第一步:使用 lateral view + explode 函数,将图①原始表中的字段名 标题转成 标题,并将字段名替换成中 文,生成中间表;

第二步:通过case when 将中间表中的日期列标题转成行标题,得到图②所需结果表

以上步骤具体代码如下 ——

第一步:

drop table if exists tmp.tmp_shop_business_index_qc2_xy;
create table tmp.tmp_shop_business_index_qc2_xy as
select order_date,bool,val
from(select order_date,
map('销售金额',sum_realamt,'订单数',sum_order,'连带率',qty_divide_order,'客单价',customer_unitprice,'复购率',repurchase_rate,'新增客数',sum_newguest,'新客首单客单价',newguest_price,'销售商品件数',sum_qty,'销售sku数',sum_code,'午高峰订单数',noon_indexs) as tmp_column
from tmp.tmp_shop_business_index_qc1_xy) x lateral view explode(tmp_column) exptbl as bool,val;

第二步:

drop table if exists tmp.tmp_shop_business_index_qc3_xy;
create table tmp.tmp_shop_business_index_qc3_xy as
select bool
,sum(case when order_date = date_sub('2021-12-28',6) then val else 0 end) as front_1days
,sum(case when order_date = date_sub('2021-12-28',5) then val else 0 end) as front_2days
,sum(case when order_date = date_sub('2021-12-28',4) then val else 0 end) as front_3days