sql - 使用 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 |
+--------+--------+------------+------------+
必须注意以下几点:
case
在这种情况下不能使用。如果他们愿意,可以使用动态查询。
我面临的问题是我无法理解如何迭代地将多个列条目转换为行。
解决方案
你将无法做到这一点。即使 Vertica 允许比其他关系数据库更多的列,例如,1600 而不是 Oracle 的 1024。
如果每个 emp_no 平均有 15 个版本,那么您将用完可能包含 11 名员工的列。
你能建议你之后想用什么样的数据处理吗?很可能还有其他方法可以将所有措施放在一起......
推荐阅读
- opencv - 在 Windows Server 2012 R2 x64 上使用 Python 3.6.4 的 OpenCV 导入 cv2:找不到 DLL
- mysql - 如何计算百分比?
- python - Django因模型名称中的特殊字符而窒息
- java - 解决 ConcurrentModificationException
- css - CSS Sticky Left 不会越过身体
- ruby-on-rails - Chewy gem 将 Elasticsearch 日期类型反序列化为字符串
- hive - 无法在 hive 中使用 nonequi join(<=)
- go - Bcrypt加密每次使用相同的输入都不同
- playframework-2.6 - 如何在 SIRD 路由器(简单路由器)中提取动态部分
- javascript - 重构vue单文件组件