Oracle - 扁平化数据

ORACLE - FLATTEN DATA

我确定以前有人问过这个问题,但可能不是这样。

这是数据:

我需要展平行和最终输出:

有什么想法吗?

正如你已经说过的,我们完全可以在这里使用row_number然后使用row_numberpivot它,

select *
  from
(  
select userid,make,model,
       row_number() over (partition by userid order by make,model) rn
  from table1
)
pivot
(
 max(make) make,max(model) model
 for rn in (1,2,3,4,5)
)

使用条件聚合,许多人更喜欢 PIVOT

select userid
      ,max(case when rn = 1 then make end) make_1
      ,max(case when rn = 1 then model end) model_1
      ,max(case when rn = 2 then make end) make_2
      ,max(case when rn = 2 then model end) model_2
      ,max(case when rn = 3 then make end) make_3
      ,max(case when rn = 3 then model end) model_3
  from
(  
select userid,make,model,
       row_number() over (partition by userid order by make,model) rn
  from table1
)
group by userid;

在这两种情况下,您可以说缺点是对行号进行硬编码,但这就是它的工作原理,否则您可以根据需要选择动态 SQL。