【问题标题】:Convert multiple rows with multiple column into one record in Oracle在Oracle中将多行多列转换为一条记录
【发布时间】:2017-12-27 13:39:47
【问题描述】:

在 Oracle SQL 查询中,我们得到 40 条记录,有 13 列。我想将所有这些记录合并一列意味着1记录中的40 * 13 = 520列。例如- 记录很少的示例表

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

【问题讨论】:

标签: sql oracle transpose


【解决方案1】:

如果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

【讨论】:

  • 我们可以在 1 条记录中使用 40 * 13 = 420 列吗
  • @PonderStibbons 可以在 Oracle 10g 上执行以上一个,因为 Oracle 10g 中没有任何支持的 WITH 子句。没有 WITH 子句可以合并吗?
  • 根据thisWITH 子句是在Oracle 9.2 中添加的,但在这里并不那么重要。 Pivot 在 11 中实现,因此在 10 中查询必须更改为 case when(或 decode)样式 - here 一些示例。
  • @PonderStibbons 代码已成功执行,但合并后我没有得到任何列值。
猜你喜欢
  • 1970-01-01
  • 2023-01-20
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多