UNPIVOT

最近更新时间:2026-05-20 14:11:22

我的收藏

描述

UNPIVOT 子句将列转换为行,是 PIVOT 的逆操作(但不包含聚合),支持无别名和标识符别名两种形式。
注意:
TCHouse-X 的 UNPIVOT IN 子句中不支持字符串别名(如 AS 'Jan'),需要使用标识符别名(如 AS Jan)。

示例

-- 基本用法: 无别名
SELECT * FROM unpivot_monthly UNPIVOT (
revenue FOR month IN (jan_revenue, feb_revenue, mar_revenue)
);

-- 标识符别名: AS Jan / AS Feb / AS Mar (字符串别名不支持)
SELECT * FROM unpivot_monthly UNPIVOT (
revenue FOR month IN (jan_revenue AS Jan, feb_revenue AS Feb, mar_revenue AS Mar)
);

-- 等价手动实现: UNION ALL 方式
SELECT product, month, revenue FROM (
SELECT product, 'Jan' AS month, jan_revenue AS revenue FROM unpivot_monthly
UNION ALL
SELECT product, 'Feb', feb_revenue FROM unpivot_monthly
UNION ALL
SELECT product, 'Mar', mar_revenue FROM unpivot_monthly
);
测试数据:
CREATE EXTERNAL TABLE unpivot_monthly (product STRING, jan_revenue INT, feb_revenue INT, mar_revenue INT)
USING PARQUET LOCATION 'cosn://<your_cos_bucket>/<your_file_path>';
INSERT INTO unpivot_monthly VALUES ('A',100,200,150),('B',80,180,220);