该方法比较通用,可以适用于Oracle、MySQL、Hive,其他数据库不清楚
测试环境:Oracle
数据准备Oracle sql代码
select '123' meter_id,'2022-05-05' data_date,'1' phase_flag,'55' cur_val from dual
union all
select '123' meter_id,'2022-05-05' data_date,'2' phase_flag,'66' cur_val from dual
union all
select '123' meter_id,'2022-05-05' data_date,'3' phase_flag,'77' cur_val from dual
数据格式如下
行转列sql代码
select METER_ID,
DATA_DATE,
SUM(case when phase_flag = '1' then cur_val end) cur_val1,
SUM(case when phase_flag = '2' then cur_val end) cur_val2,
SUM(case when phase_flag = '3' then cur_val end) cur_val3
from
(
select '123' meter_id,'2022-05-05' data_date,'1' phase_flag,'55' cur_val from dual
union all
select '123' meter_id,'2022-05-05' data_date,'2' phase_flag,'66' cur_val from dual
union all
select '123' meter_id,'2022-05-05' data_date,'3' phase_flag,'77' cur_val from dual)
group by METER_ID,data_date
行转列后数据格式
下面链接有更多的办法,但是本文介绍的case when方法是比较通用的一种方式。
链接