在工作中我们会遇见类似转置的需求 我们可以通过以下方法解决:
with a as (
select '20200101' as dt ,111 as cnt
UNION all
select '20200102' as dt ,1 as cnt
UNION all
select '20200103' as dt ,89 as cnt
)
select dt_map['20200101'],dt_map['20200102'],dt_map['20200103']
from (
select str_to_map(concat_ws(',', collect_set(concat(dt, '-', cnt))),',','-') dt_map
from (
select dt,sum(cnt) as cnt
from a
group by dt
) tmp
group by 1
) t