首页 > 解决方案 > 使用 vertica 对表进行转置

问题描述

最近我遇到了 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 |
+--------+--------+------------+------------+

必须注意以下几点:

  1. case在这种情况下不能使用。

  2. 如果他们愿意,可以使用动态查询。

我面临的问题是我无法理解如何迭代地将多个列条目转换为行。

标签: sqlvertica

解决方案


你将无法做到这一点。即使 Vertica 允许比其他关系数据库更多的列,例如,1600 而不是 Oracle 的 1024。

如果每个 emp_no 平均有 15 个版本,那么您将用完可能包含 11 名员工的列。

你能建议你之后想用什么样的数据处理吗?很可能还有其他方法可以将所有措施放在一起......


推荐阅读