vertica sql实现行转列
CREATE TABLE t1 ( id int, name varchar(10) ); INSERT INTO t1 SELECT 1 AS id, 'greg' AS name UNION ALL SELECT 2, 'paul' UNION ALL SELECT 3, 'greg' UNION ALL SELECT 4, 'greg' UNION ALL SELECT 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)), '') id FROM (SELECT name, id, ROW_NUMBER() OVER(PARTITION BY name ORDER BY id) row_number FROM t1) a GROUP BY a.name ORDER BY a.name;
Result
name | id
------+-------
greg | 1,3,4
paul | 2,5
作者:Lave Zhang
出处:http://www.cnblogs.com/lavezhang/
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
浙公网安备 33010602011771号