StarRocks 行转列 原始数据,包含两列: A,B1 A,B2 A,B3
期望输出格式,包含4列: A,B1,B2,B3
在 StarRocks 中,你可以使用窗口函数和聚合函数来实现行转列的操作。假设你的原始数据表名为 original_table
,包含两列 col1
和 col2
,你希望将相同 col1
的 col2
值转为列。
以下是一个示例 SQL 查询,展示了如何实现这一点:
WITH ranked_data AS (
SELECT
col1,
col2,
ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2) AS row_num
FROM
original_table
),
pivoted_data AS (
SELECT
col1,
MAX(CASE WHEN row_num = 1 THEN col2 END) AS col2_1,
MAX(CASE WHEN row_num = 2 THEN col2 END) AS col2_2,
MAX(CASE WHEN row_num = 3 THEN col2 END) AS col2_3
FROM
ranked_data
GROUP BY
col1
)
SELECT
col1,
col2_1,
col2_2,
col2_3
FROM
pivoted_data;
解释:
ranked_data
CTE(Common Table Expression)使用 ROW_NUMBER()
窗口函数为每个 col1
分组内的 col2
值分配一个行号。pivoted_data
CTE 使用条件聚合(MAX(CASE WHEN ... THEN ... END)
)将行转为列。SELECT
语句从 pivoted_data
中选择所需的列。请注意,这个示例假设每个 col1
组最多有 3 个 col2
值。如果有更多的值,你需要在 pivoted_data
CTE 中添加更多的 MAX(CASE WHEN ...)
语句。
希望这能帮助你实现行转列的