如何将单列转换为单行

时间:2019-02-22 15:16:49

标签: sql postgresql

我似乎找不到合适的例子,但是假设我有一个结果表,如下所示...

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

2 个答案:

答案 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来说同样如此。