在PostgreSQL中将多行合并为多列

在PostgreSQL中将多行合并为多列,postgresql,case,Postgresql,Case,这是表中的数据 项目代码 名称/类型 名称值 1. 满的 项目1全名 1. 短的 项目1短名称 1. 一半 项目1半个名称 1. 半决赛 项目1半名称 2. 短的 项目2简称 3. 一半 项目3半个名称 您需要使用group by item_代码来获取每个组的一行,然后使用类似max()的聚合来获取每个组的非空值: select item_code, max( case name_type when 'full' then name_value

这是表中的数据

项目代码 名称/类型 名称值 1. 满的 项目1全名 1. 短的 项目1短名称 1. 一半 项目1半个名称 1. 半决赛 项目1半名称 2. 短的 项目2简称 3. 一半 项目3半个名称
您需要使用group by item_代码来获取每个组的一行,然后使用类似max()的聚合来获取每个组的非空值:

select
    item_code,
    max(
      case name_type
        when 'full' then name_value
      end
    ) as full_name,
    max(
      case name_type
        when 'short' then name_value
      end
    ) as short_name,
    max(
      case name_type
        when 'half' then name_value
      end 
    ) as half_name
from t
group by 1;

@阿兰风为什么是马克斯?它们都是字符串值,对吗?试试不带,看看会发生什么。当您执行GROUPBY时,select expr会在许多行上进行迭代,并且您通常会通过聚合告诉您想要哪一行。