vertica sql实现行转列

CREATE TABLE t1 ( id int, name varchar(10));INSERT INTO t1SELECT 1 AS id, greg AS nameUNION ALLSELECT 2, paulUNION ALLSELECT 3, gregUNION ALLSELECT 4, gregUNION ALLSELECT 5, paul;COMMIT;SELECT name, MAX(DECODE(row_number, 1, a.id)) || NVL(MAX(DECODE(row_number, 2, , || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 3, , || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 4, , || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 5, , || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 6, , || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 7, , || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 8, , || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 9, , || a.id)), ‘‘) || NVL(MAX(DECODE(row_number, 10, , || a.id)), ‘‘) idFROM (SELECT name, id, ROW_NUMBER() OVER(PARTITION BY name ORDER BY id) row_number FROM t1) aGROUP BY a.nameORDER BY a.name;

Result

 name | id------+------- greg | 1,3,4 paul | 2,5

相关文章