描述
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_monthlyUNION ALLSELECT product, 'Feb', feb_revenue FROM unpivot_monthlyUNION ALLSELECT 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);