这是我第一次使用转置 所以我不知道我想要的是否可能
这是我的查询
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;
这里是链接 http://rextester.com/IQNSY51011
但是输出与我想要的不同,因为productz 1有两行而productz 2有3行
name interface negativemargin parity
dufan true true NULL
waterboom android true false
我想要的输出如下所示没有插入接口,Null到数据库
name interface negativemargin parity
dufan NULL true true
waterboom android true false
注意:请点击"运行它"打开链接后
答案 0 :(得分:1)
解决您的问题:
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);
链接: http://rextester.com/OPNK82802
将crosstab(text, text)
与2个输入参数一起使用。
第二个参数可以是任何查询,每个属性返回一行,最后匹配列定义的顺序。
CROSSTAB(文本)有什么问题,即带有1个参数的交叉表?
交叉表的单参数形式的主要限制是它同样处理组中的所有值,将每个值插入第一个可用列。如果您希望值列对应于特定类别的数据,并且某些组可能没有某些类别的数据,那么这样做效果不佳。交叉表的双参数形式通过提供与输出列对应的类别的显式列表来处理这种情况。
有关crosstab
的更多信息,请点击以下链接: