问题描述
我可以肯定已经问过这个问题,但是可能不是这样。
以下是数据:
我需要平整行并结束输出:
有什么想法吗?
解决方法
正如您已经说过的,我们完全可以在此处使用row_number
,然后使用row_number
到pivot
,
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。