2017-12-27 139 views
2

在Oracle SQL查询中我们得到了40个记录具有13列。我想合并所有这些记录到一列意味着40 * 13 = 520列在1记录。其EG-样品表记录数在Oracle中将具有多列的多行转换为一个记录

col1 col2 city cntry conti 
1  abc NYC USA NA 
2  def LON UK  EU 
3  xyz DUB UAE ASIA 

再经过合并所有记录&进入一个记录,那么它应该像下面的单

col1 col2 city cntry conti col1 col2 city cntry conti col1 col2 city cntry conti 
1  abc NYC USA NA  2  def LON UK  EU  3  xyz DUB UAE ASIA 
+0

Oracle对单个记录中的字节数有限制。您的数据可能不适合放在一行上。 –

+0

@GordonLinoff你能提供一个对这个限制的参考吗?我[可以找到](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/refrn/logical-database-limits.html#GUID-685230CF-63F5-4C5A-B8B0-037C566BDA76)只有每个表的列的限制。 –

+0

“行的固定长度列的最大累积长度(字节)= 32,768”,https://docs.oracle.com/cd/E11882_01/timesten.112/e21643/limit.htm#TTREF456。 –

回答

2

如果列col1包含唯一值那么你可以使用pivot

select * 
    from t 
    pivot (max(col1) col1, max(col2) col2, max(city) city, max(cntry), max(conti) conti 
     for col1 in (1, 2, 3)) 

SQLFiddle demo

+0

可以用1条记录中的40 * 13 = 420列来做 – user8487380

+0

[是](http://sqlfiddle.com/#!4/83b2cd/247)。 –

+1

@PonderStibbons可以在Oracle 10g上执行,因为在Oracle 10g中没有任何受支持的WITH子句。没有WITH子句可以合并? –