+-
如何将单个列转换为单行

我似乎无法找到一个很好的例子,但是假设我有一个看起来如下的结果表......

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证明难以使用。

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
投票

您可以使用条件聚合:

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也是如此。