【发布时间】:2017-05-04 00:00:30
【问题描述】:
我在 Oracle 中有一个如下设计的表格
+-----------+------+-------+
| ID | TYPE | VALUE |
+-----------+------+-------+
| 1 | A | 1 |
| 1 | B | 2 |
| 1 | C | 3 |
| 2 | A | 4 |
| 2 | B | 5 |
| 2 | C | 6 |
+-----------+------+-------+
我需要像这样转置这个表
+-----------+------+-------+-----+
| ID | A | B | C |
+-----------+------+-------+-----+
| 1 | 1 | 2 | 3 |
| 2 | 4 | 5 | 6 |
+-----------+------+-------+-----+
下面是我使用 oracle pivot 函数将这些行转置为列的 sql。
select * from
(
select ID, TYPE, VALUE from table where TYPE in ('A','B','C')
)
PIVOT (
max(value)
for TYPE in (1 column_a, 2 column_b, 3 column_c)
)
这是我的问题
- 这会返回结果,但即使它不为空,也会返回空值。它返回 NULL 是因为我使用的是带有字符串值的聚合函数吗?
- 此 SQL 未将值映射到类型。所以基本上值总是需要绑定到类型列。这对 PIVOT 功能可行吗?
我也在考虑通过使用 INSERT 和 SELECT 来重新创建表。请告知使用 PIVOT 是否可行。
【问题讨论】:
-
你需要 'A','B','C' 而不是 1,2,3