如何在 PostgreSQL 中转换查询结果

How to transform the result of a query in PostgreSQL

我想从我的数据库中提取某些信息。在进行第一个查询后,我得到了这样的结果:

Name   Description    Status    Count
-------------------------------------------
A       a-desc        S1        200
A       a-desc        S2        50
A       a-desc        S3        102
B       b-desc        S1        10
B       b-desc        S3        12

我想将 table 转换为另一个:

Name   Description    S1     S2     S3
-------------------------------------------
A      a-desc         200    50     102
B      b-desc         10     0      12

我想用 Postgres 来做这件事。我尝试使用嵌套查询,但目前无法使用。

这是使用大多数 rdbms 支持的通用 SQL 执行 "pivot query" 的 "traditional" 方法:

select
  Name   
, Description    
, max(case when status = 'S1' then  count end) as S1   
, max(case when status = 'S2' then  count end) as S2
, max(case when status = 'S3' then  count end) as S3
from (

    your query goes here

    ) d
group by
  Name   
, Description    

然而,您的数据库可能会为数据透视表提供特定的功能(如果我们知道那是什么),但是传统方法是适应性强的并且知道它很有用。