oracle sql pivot正在对我的数据进行分组

时间:2016-12-16 10:04:32

标签: sql oracle pivot

我在使用pivot创建查询时遇到问题。 我有一个有4列的表

col1 | col2 | col3 | col4
1    | 1    |   5  | 2
1    | 2    |   6  | 2
1    | 3    |   7  | 2
1    | 4    |   8  | 2
1    | 1    |   5  | 2
1    | 2    |   6  | 2
1    | 3    |   7  | 2
1    | 4    |   8  | 2

我正在使用pivot,所以我可以输出这样的项目:

col1 | col2 | col3

以下是查询:

select col1, "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24"
from (
   select col1, col2, col3
   from tbl
   where col4 = 2
)
pivot 
(
   max(col2)
   for col3
   in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24)
)

当我在数据库中有2个相同的记录时,代码一直有效。它然后分组并显示为一个。我希望将其输出为2个单独但相同的行。我看到的最简单的修复是我在表中包含另一列作为ID。但是因为我在其他任何地方都没有使用这个ID,我认为它有点无意义,而且只需更改代码就会更容易,也更少工作。

上面的代码输出:

1 5 6 7 8 9

我喜欢这个:

1 5 6 7 8 9
1 5 6 7 8 9

1 个答案:

答案 0 :(得分:0)

使用ROW_NUMBER()分析函数添加另一列:

SELECT *
FROM   ( SELECT t.*,
                ROW_NUMBER() OVER ( PARTITION BY col1, col2, col3, col4
                                    ORDER BY ROWNUM ) AS rn
         FROM   tbl t )
PIVOT  ( MAX( Col2 ) FOR Col3 IN ( 1,2,3,4,5,6,7,8,9,10 /* ..., 24*/ ) );

<强>输出

COL1 COL4 RN 1 2 3 4 5 6 7 8 9 10
---- ---- -- - - - - - - - - - --
   1    2  1         1 2 3 4
   1    2  2         1 2 3 4