【发布时间】:2016-03-04 08:52:07
【问题描述】:
我有以下简单的例子:
CREATE TABLE Cars ( Cars, Item, Value ) AS
SELECT 'bmw', 'wheels', '4' FROM DUAL UNION ALL
SELECT 'bmw', 'color', 'red' FROM DUAL UNION ALL
SELECT 'bmw', 'price', '5' FROM DUAL UNION ALL
SELECT 'mercedes', 'wheels', '4' FROM DUAL UNION ALL
SELECT 'mercedes', 'color', 'black' FROM DUAL UNION ALL
SELECT 'lambo', 'wheels', '5' FROM DUAL UNION ALL
SELECT 'lambo', 'color', 'yellow' FROM DUAL UNION ALL
SELECT 'lambo', 'price', '7' FROM DUAL UNION ALL
SELECT 'mercedes', 'price', '6' FROM DUAL;
问题是我需要“透视”表格以获取项目作为列名,并将值作为值并将所有内容分组在一起(具有唯一汽车名称且单元格中没有空值的行)。因此我写了“pivot”,因为经典的旋转(DECODE)会导致不同的结果——减少单元格中的倾斜值和大量的空值。所以它看起来像这样
car wheels color price
-------- ------ ------ -----
bmw 4 red 5
lambo 5 yellow 7
mercedes 4 black 6
那么问题来了:
我应该通过程序执行此操作还是有更优雅的解决方案?过程如下(伪代码):
1. create table cars2 /*collumns are known in before, wheels/color/price*/
2. get the distinct names of the cars and insert them into collection /*eg nested table*/
3. for each car do
insert into table cars2
values per item /*looping items and inserting corresponding values*/
好的,代码看起来很简单。但是拥有超过 50 万条记录和 15 项,并且每小时更新一次表可能会导致真正的性能问题。
【问题讨论】: