我似乎找不到一个像样的例子,但假设我有一个结果表,如下所示……
result
100
200
400假设行数总是相同的(在本例中是n=3),现在我想转置它,并能够随心所欲地命名每一列……
result1 result2 result3
100 200 400我检查了pivot函数,但似乎无法让它工作……
select * from total_results pivot(result for result in (result1, result2, result3))然而,这会给我带来错误。我如何才能完成我想要的,我似乎找不到一个我能理解的简单示例,因为pivot被证明很难使用。
发布于 2019-02-22 23:18:47
您需要带条件聚合的row_number():
select max(case when seq = 1 then result end) as result1,
max(case when seq = 2 then result end) as result2,
max(case when seq = 3 then result end) as result3
from (select t.*,
row_number() over (order by result) as seq
from table t
) t;发布于 2019-02-22 23:20:54
您可以使用条件聚合:
select max(case when seqnum = 1 then result end) as result1,
max(case when seqnum = 2 then result end) as result2,
max(case when seqnum = 3 then result end) as result3
from (select t.*, row_number() over (order by result) as seqnum
from t
) t;关键是使用row_number()枚举值,然后使用它。我更喜欢条件聚合,但pivot也是如此。
https://stackoverflow.com/questions/54830104
复制相似问题