ORACLE-FLATTEN数据

问题描述

我可以肯定已经问过这个问题,但是可能不是这样。

以下是数据:

enter image description here

我需要平整行并结束输出

enter image description here

有什么想法吗?

解决方法

正如您已经说过的,我们完全可以在此处使用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,model) rn
  from table1
)
group by userid;

在两种情况下,您都可以说缺点是对行号进行硬编码,但这是它的工作方式,否则,如有必要,您可以选择动态SQL。