如何在Vertica中实现列转行(Pivot)操作?
Vertica 实现列转行与字符串直接拆分行方案
一、已拆分多列的表转成行结构
对于已拆分为completion_Rate - step1、completion_Rate - step2、completion_Rate - step3多列的表,可通过UNION ALL拼接子查询实现列转行,这是Vertica处理固定数量列转行的常规方法:
SELECT ID, 1 AS step_number, "completion_Rate - step1" AS completion_Rate FROM your_table_name UNION ALL SELECT ID, 2 AS step_number, "completion_Rate - step2" AS completion_Rate FROM your_table_name UNION ALL SELECT ID, 3 AS step_number, "completion_Rate - step3" AS completion_Rate FROM your_table_name ORDER BY ID, step_number;
每个子查询对应一个步骤,手动指定step_number并选取对应列的数值,最后通过UNION ALL合并结果,按ID和步骤号排序即可得到目标结构。
二、直接从下划线分隔字符串拆分成行
如果原始表存储的是下划线分隔的字符串(如0_29_54),可使用Vertica内置的STRSPLIT_TO_TABLE函数直接拆分字符串为多行,无需先拆分为列:
SELECT t.id, s.position AS step_number, s.value::INT AS completion_Rate FROM your_original_table t CROSS JOIN STRSPLIT_TO_TABLE(t.completion_rates, '_') OVER (PARTITION BY t.id) s ORDER BY t.id, s.position;
说明:
STRSPLIT_TO_TABLE按指定分隔符(此处为_)拆分字符串,返回包含position(拆分元素的位置,从1开始)和value(拆分后元素值)的结果集。OVER (PARTITION BY t.id)确保每个ID的拆分结果与原ID关联。- 根据实际数据类型,将
value转换为INT类型,最后按ID和步骤号排序。
内容的提问来源于stack exchange,提问作者yarden pel
相关产品推荐
相关产品推荐

