具有不同属性行的postgresql转置

具有不同属性行的postgresql转置,sql,postgresql,Sql,Postgresql,这是我第一次使用转置 所以我不知道我想要的是否可能 这是我的问题 SELECT * FROM crosstab( 'select p.name, a.attributekey, a.attributevalue from productz p join attribute a on a.itemid=p.id order by p.name, a.attributekey') AS final_result(name varchar, inter

这是我第一次使用转置 所以我不知道我想要的是否可能

这是我的问题

SELECT * 
FROM crosstab( 
    'select p.name, a.attributekey, a.attributevalue
    from productz p 
    join attribute a on a.itemid=p.id
    order by p.name, a.attributekey') 
     AS final_result(name varchar, interface varchar, negativemargin varchar,parity varchar);
select p.name, a.attributekey, a.attributevalue
    from productz p 
    join attribute a on a.itemid=p.id
order by p.name, a.attributekey;
这是链接

但是输出与我想要的不同,因为Productz1有两行,Productz2有三行

name      interface negativemargin parity
dufan     true      true           NULL
waterboom android   true           false
我想要的输出如下,没有插入接口,数据库为空

name      interface negativemargin parity
dufan     NULL      true           true
waterboom android   true           false

注意:请在打开链接后单击“运行”,以解决您的问题:

SELECT * 
FROM crosstab( 
    'select p.name, a.attributekey, a.attributevalue
    from productz p 
    join attribute a on a.itemid=p.id
    order by p.name, a.attributekey',
    'SELECT DISTINCT attributekey FROM attribute ORDER BY 1') 
     AS final_result(name varchar, interface varchar, negativemargin varchar,parity varchar);
链接:

使用带有2个输入参数的
交叉表(文本,文本)
。 第二个参数可以是任何查询,每个属性返回一行,该行与末尾的列定义顺序匹配

交叉表(文本)有什么问题,即交叉表有1个参数?

交叉表的单参数形式的主要限制是,它将一组中的所有值都一视同仁,将每个值插入到第一个可用列中。如果您希望值列对应于特定的数据类别,而某些组可能没有某些类别的数据,那么这样做并不好。交叉表的双参数形式通过提供与输出列对应的类别的显式列表来处理这种情况

有关交叉表的更多信息,请点击以下链接: