【问题标题】:Oracle column rows split in to multible columnsOracle 列行拆分为多列
【发布时间】:2016-12-21 20:53:51
【问题描述】:

从表中选择年份、代码、基准;

结果:年份、代码、基准

    2017, MKPI00719, 1
    2017, MKPI00719, benchmark0001
    2017, MKPI00719, 2016
    2017, MKPI00719, 90
    2017, MKPI00743, 1
    2017, MKPI00743, benchmark34455
    2017, MKPI00743, 2013
    2017, MKPI00743, 900

我想在下面这样显示

 Year, code,        ben_value, desc,          b_year, kpi 
 2017, MKPI00719,   1,      benchmark0001,  2016,   90 
 2017, MKPI00743,  1,       benchmark87899, 2013,   900 

此情景 ben_value 始终为 1。那是唯一的,分组的 年份,代码。

请帮助我如何在oracle中编写我的sql

【问题讨论】:

  • SQL 表本质上是无序的。您对数据的重新排列似乎依赖于行的顺序。你有另一列指定排序吗?
  • 是的,没有序列号
  • 将该序列号添加到您的示例数据中 - 我不明白它是如何工作的。该序列中的典型值是什么(对于您包含的行)?

标签: sql oracle


【解决方案1】:

如果你有序列号,那么我认为以下解决了你的问题:

select year, code,
       max(case when seqnum = 1 then benchmark end) as ben_value,
       max(case when seqnum = 2 then benchmark end) as description,
       max(case when seqnum = 3 then benchmark end) as b_year,
       max(case when seqnum = 4 then benchmark end) as kpi
from (select t.*,
             row_number() over (partition by year, code order by sequence_no) as seqnum
      from t
     ) t
group by year, code

【讨论】:

  • 知道了,非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 1970-01-01
相关资源
最近更新 更多