我似乎找不到合适的例子,但是假设我有一个结果表,如下所示...
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
难以使用。
答案 0 :(得分:1)
您希望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;
答案 1 :(得分:1)
您可以使用条件聚合:
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
来说同样如此。