最近我遇到了vertica这是一个柱状数据库,我需要转置基础表。这就是将所有列转换为行。
+--------+--------+------------+------------+
| emp_no | salary | from_date | to_date |
+--------+--------+------------+------------+
| 10001 | 60117 | 1986-06-26 | 1987-06-26 |
| 10001 | 62102 | 1987-06-26 | 1988-06-25 |
| 10001 | 66074 | 1988-06-25 | 1989-06-25 |
| 10001 | 66596 | 1989-06-25 | 1990-06-25 |
| 10001 | 66961 | 1990-06-25 | 1991-06-25 |
| 10001 | 71046 | 1991-06-25 | 1992-06-24 |
| 10001 | 74333 | 1992-06-24 | 1993-06-24 |
| 10001 | 75286 | 1993-06-24 | 1994-06-24 |
| 10001 | 75994 | 1994-06-24 | 1995-06-24 |
| 10001 | 76884 | 1995-06-24 | 1996-06-23 |
| 10001 | 80013 | 1996-06-23 | 1997-06-23 |
| 10001 | 81025 | 1997-06-23 | 1998-06-23 |
| 10001 | 81097 | 1998-06-23 | 1999-06-23 |
| 10001 | 84917 | 1999-06-23 | 2000-06-22 |
| 10001 | 85112 | 2000-06-22 | 2001-06-22 |
| 10001 | 85097 | 2001-06-22 | 2002-06-22 |
| 10001 | 88958 | 2002-06-22 | 9999-01-01 |
| 10002 | 65828 | 1996-08-03 | 1997-08-03 |
| 10002 | 65909 | 1997-08-03 | 1998-08-03 |
| 10002 | 67534 | 1998-08-03 | 1999-08-03 |
| 10002 | 69366 | 1999-08-03 | 2000-08-02 |
| 10002 | 71963 | 2000-08-02 | 2001-08-02 |
| 10002 | 72527 | 2001-08-02 | 9999-01-01 |
| 10003 | 40006 | 1995-12-03 | 1996-12-02 |
| 10003 | 43616 | 1996-12-02 | 1997-12-02 |
| 10003 | 43466 | 1997-12-02 | 1998-12-02 |
| 10003 | 43636 | 1998-12-02 | 1999-12-02 |
| 10003 | 43478 | 1999-12-02 | 2000-12-01 |
| 10003 | 43699 | 2000-12-01 | 2001-12-01 |
| 10003 | 43311 | 2001-12-01 | 9999-01-01 |
+--------+--------+------------+------------+
必须注意以下几点:
case
。我面临的问题是我无法理解如何迭代地将多个列条目转换为行。
你将无法做到这一点。即使Vertica允许比其他关系数据库更多的列,例如1600而不是Oracle的1024。
如果每个emp_no平均有15个版本,那么您将拥有11名员工的可能列。
您能否建议您之后使用哪种数据处理?很可能还有其他方法可以将所有措施结合在一起......