使用sql填充数据
1.创建表
create table test (
name string,
activity string
) row format delimited fields terminated by '\t';
2.构造数据
张三 吃饭
张三
张三
张三
王五 打豆豆
王五
王五
赵四 唱歌
赵四
赵四
赵四
赵四
赵四
赵四
3.处理思路
3.1 使用sum()over(order by)开窗函数特性进行累积分组
select
sum(flag)over(order by rownum) as category,
name,
activity
from
(
select
row_number()over() as rownum,
case when activity =='' then 0 else 1 end as flag,
name,
activity
from test
) tab_test
1 张三 吃饭
1 张三
1 张三
1 张三
2 王五 打豆豆
2 王五
2 王五
3 赵四 唱歌
3 赵四
3 赵四
3 赵四
3 赵四
3 赵四
3 赵四
3.2 将非空的数据筛选出来进行分组
select
row_number()over() as category,
name,
activity
from test
where activity !=''
1 张三 吃饭
2 王五 打豆豆
3 赵四 唱歌
3.3 将上两步结果进行关联
select
tab_test_origin.name,
tab_category.activity
from
(
select
sum(flag)over(order by rownum) as category,
name,
activity
from
(
select
row_number()over() as rownum,
case when activity =='' then 0 else 1 end as flag,
name,
activity
from test
) tab_test
) tab_test_origin
inner join
(
select
row_number()over() as category,
name,
activity
from test where activity !=''
) as tab_category
on tab_test_origin.category=tab_category.category
张三 吃饭
张三 吃饭
张三 吃饭
张三 吃饭
王五 打豆豆
王五 打豆豆
王五 打豆豆
赵四 唱歌
赵四 唱歌
赵四 唱歌
赵四 唱歌
赵四 唱歌
赵四 唱歌
赵四 唱歌