更新时间:2024-06-03 GMT+08:00

行转列与列转行

  • 行转列
    --建表并插入数据。
    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;
  • 列转行
    --建表并插入数据。
    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;