GaussDB-行转列与列转行

66 阅读1分钟

GaussDB-行转列与列转行

  • 行转列

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

更多详情请参考GaussDB 文档中心:doc.hcs.huawei.com/db/zh-cn/ga…