云数据库 GaussDB-行转列与列转行

时间:2025-02-12 15:08:13

行转列与列转行

  • 行转列
    --建表并插入数据。gaussdb=# CREATE TABLE test_p2(id INT, class VARCHAR(20), score INT);gaussdb=# INSERT INTO test_p2 VALUES (1,'math',64), (1,'english',78);gaussdb=# INSERT INTO test_p2 VALUES (2,'math',98), (2,'english',82);gaussdb=# INSERT INTO test_p2 VALUES (3,'math',68), (3,'english',59);gaussdb=# SELECT * FROM test_p2; id |  class  | score ----+---------+-------  3 | math    |    68  3 | english |    59  1 | math    |    64  1 | english |    78  2 | math    |    98  2 | english |    82(6 rows)--行转列。gaussdb=# SELECT * FROM test_p2 PIVOT(MAX(score) FOR class IN('math','english')); id | 'math' | 'english' ----+--------+-----------  3 |     68 |        59  1 |     64 |        78  2 |     98 |        82(3 rows)--删除。gaussdb=# DROP TABLE test_p2;
  • 列转行
    --建表并插入数据。gaussdb=# CREATE TABLE test_p1(id INT, math INT, english INT);gaussdb=# INSERT INTO test_p1 VALUES (1,84,78), (2,98,82), (3,68,59);gaussdb=# SELECT * FROM test_p1; id | math | english ----+------+---------  3 |   68 |      59  1 |   84 |      78  2 |   98 |      82(3 rows)--列转行。gaussdb=# SELECT * FROM test_p1 UNPIVOT(score FOR class IN(math, english)); id |  class  | score ----+---------+-------  3 | MATH    |    68  3 | ENGLISH |    59  1 | MATH    |    84  1 | ENGLISH |    78  2 | MATH    |    98  2 | ENGLISH |    82(6 rows)--删除。gaussdb=# DROP TABLE test_p1;
support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0682.html