2013-06-22 18 views
0

我需要将改变oracle sql。改造一列到一行

1 
2 
3 
4 

1 2 3 4

不使用PIVOT功能,因为我运行Oracle数据库10 SQL SELECT语句。 在互联网上搜索了很多,但令人惊讶的是没有发现任何东西。

帮助不大?

回答

1

你可以做一个pivot几乎一样有效地利用交叉联接:

select max(case when seqnum = 1 then t.col end) as col1, 
     max(case when seqnum = 2 then t.col end) as col2, 
     max(case when seqnum = 3 then t.col end) as col3, 
     max(case when seqnum = 4 then t.col end) as col4 
from (select t.*, row_number() over (order by NULL) as seqnum 
     from t 
    ) t 
+0

谢谢您的回答。如果列数不限于4,你是否知道同样问题的解决方案?因为在我的问题 - 其中有6个,我想我可能会遇到更多的列数 – Dennis

+0

@丹尼斯。 。 。 SQL选择查询必须具有固定数量的列。您可以在'select'中为附加列添加其他子句。但是你不能改变数字(如果没有值的话,它们将被填充NULL)。或者,您可以使用'list_agg'将它们全部放在一列中,并带有分隔符。 –

+0

对,我明白了。非常感谢。我会记下这个解决方案,因为它似乎是一项微不足道的任务。 – Dennis