我在使用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
答案 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