PostgreSQL中的Pivot/Crossstab

ua4mk5z4  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(159)

原始数据

Desc.    Value
-----    ------
Date     01/01/2022
Date     30/04/2021
Date     29/03/2022
Weeksgs  14w 3d
Weeksgs  15w 0d

要求结果

Date        Weeksgs
------      --------
01/01/2022  14w 3d
30/04/2021  15w 0d
29/03/2022
vlf7wbxs

vlf7wbxs1#

您似乎想要“对齐”“日期”和“星期”行。假设你有一个列来排序你的记录,比如id,你可以用row_number()枚举每个分区中的行,然后用条件聚合进行pivot:

select max(val) filter(where descr = 'Date'   ) val_date,
       max(val) filter(where descr = 'Weeksgs') val_weeksgs
from (
    select t.*, row_number() over(partition by descr order by id) rn
    from mytable t
) t
group by rn
order by rn

注意:如果“Date”行 do 表示日期,您可能希望将它们转换为resultset中正确的数据类型;参见to_date()

相关问题