更新时间:2025-03-13 GMT+08:00

Unpivot

算子说明

转置算子。用于将行转换为列。这个操作可以将一张表中的多列数据转换为两列,其中一列是原始表中的列名,另一列是对应的值。

典型场景

查询使用unpivot转置的表。

示例

示例:查询使用unpivot转置的表。
--UNPIVOT语法只能在O兼容库中使用
gaussdb=# CREATE DATABASE ora_test WITH DBCOMPATIBILITY = 'ORA';
gaussdb=# \c ora_test 
gaussdb=# SET enable_fast_query_shipping=off; 

--数据准备。 
ora_test=# DROP TABLE IF EXISTS t1;
ora_test=# CREATE TABLE t1 (id int, number int, grade int);
CREATE TABLE
ora_test=# INSERT INTO t1 VALUES(generate_series(1,100), 1, 2);
INSERT 0 100

--执行结果。 
ora_test=# EXPLAIN SELECT *  FROM t1 UNPIVOT (v1 FOR v2 in (id,number,grade));
                                          oracle
                                        QUERY PLAN
------------------------------------------------------------------------------------------
 Streaming (type: GATHER)  (cost=1.88..16.24 rows=60 width=36)
   Node/s: All datanodes
   ->  Subquery Scan on __unnamed_unpivot_subquery__  (cost=0.00..13.43 rows=60 width=36)
         Filter: (__unnamed_unpivot_subquery__.v1 IS NOT NULL)
         ->  Unpivot  (cost=0.00..13.13 rows=60 width=36)
               ->  Seq Scan on t1  (cost=0.00..13.13 rows=20 width=12)
(6 rows)

--删除。
ora_test=# DROP TABLE t1;
ora_test=# \c gaussdb
gaussdb=# DROP DATABASE ora_test;