如何在Postgresql中显示数据行列?

时间:2018-12-31 11:03:36

标签: postgresql

这是我的数据和查询。我想在列中显示行数据...有人可以帮助我修改查询吗?我正在使用PostgreSQL查询。

select 
    ss.name, ip.product_name, ssr.quantity 
from 
    services_servicerecipe ssr
inner join 
    services_service ss on ssr.service_id = ss.id
inner join 
    inventory_product ip on ssr.product_id = ip.id
order by 
    ss.name

输出:

Service_name |  Product_name    |  Quantity
-------------+------------------+-----------
Balayage     |      7.3-revlon  |   2
Balayage     |      701-revlon  |   1

我希望它看起来像这样

Service_name |  Product_name     |   Quantity   |  Product_name    | Quantity
-------------+-------------------+--------------+------------------+----------
Balayage     |      7.3-revlon   |   2          |     701-revlon   |   1

1 个答案:

答案 0 :(得分:1)

这是一个枢轴选项,使用ROW_NUMBER

with cte as (
    select ss.name, ip.product_name, ssr.quantity,
        row_number() over (partition by ss.name order by ip.product_name) rn
    from services_servicerecipe ssr
    inner join services_service ss on ssr.service_id = ss.id
    inner join inventory_product ip on ssr.product_id = ip.id
)

select
    name,
    max(case when rn = 1 then product_name end) as product1,
    max(case when rn = 1 then quantity end) as quantity1,
    max(case when rn = 2 then product_name end) as product2,
    max(case when rn = 2 then quantity end) as quantity2
from cte
group by name;