前两天有个行转列的需求困扰了同事,我看了之后想出如下自认为较为简单的实现方法,和大家分享一下~
数据格式如下:
现在的目标是像转为一行,即:
productid 服务 位置 设施 卫生
344920 ** ** ** **
现在想到的方式case when 结合concat_ws与collect_set实现,代码如下:
select productid
,concat_ws('',collect_set(fuwu)) `服务`
,concat_ws('',collect_set(weizhi)) `位置`
,concat_ws('',collect_set(sheshi)) `设施`
,concat_ws('',collect_set(weisheng)) `卫生`
from
( select productid
,case when tagtype='位置' then highlight else '' end as weizhi
,case when tagtype='服务' then highlight else '' end as fuwu
,case when tagtype='卫生' then highlight else '' end as weisheng
,case when tagtype='设施' then highlight else '' end as sheshi
from dw_htl.tmp_dianpingt
) a
group by productid
效果如下: