PostgreSQL 中的行到列

Rows to columns in PostgreSQL

我有以下主要内容table:

order_id    unique_order_id   article_price
    1             1A                100
    1             1B                200 
    1             1C                300
    2             2A                100

我希望得到以下结果:

order_id   article_priceA    article_priceB   article_priceC
    1            100                200              300
    2            100                null             null

我找到了一个解决方案,通过对每个 unique_order 进行主 table 的自连接(我将每个 order_id 最多有 4 个不同的唯一订单(A,B ,C,D),不过我想知道是否有更好的方法来做到这一点?

我目前的解决方案是这样的:

select 
a.order_id, 
a.article_price as article_priceA,
b.article_price as article_priceB, 
c.article_price as article_priceC

from main a 
left join main b on b.order_id=a.order_id and right(unique_order_id,1)='B' 
left join main c on b.order_id=a.order_id and right(unique_order_id,1)='C

您可以为此使用条件聚合:

select order_id,
    max(case when right(unique_order_id, 1) = 'A' then article_price end) as article_priceA,
    max(case when right(unique_order_id, 1) = 'B' then article_price end) as article_priceB,
    max(case when right(unique_order_id, 1) = 'C' then article_price end) as article_priceC
from main
group by order_id;