这里用样本解释我的问题。
我的样本查询。
SELECT * FROM public.crosstab(
$$VALUES ('na','sales', 1, 100)
,('na','sales1', 1, 1000)
, ('ba','sales', 2, 300) $$
,$$VALUES ('1'), ('2')$$
) AS pivot (na text,n text, co11 int, col2 int)
它产生这样的结果
Na N Col1 Col2
na sales 1000
ba sales 300
但我希望得到这样的
Na N Col1 Col2
na sales 100
na sales1 1000
ba sales 300
如何获得?为什么上述查询会产生该结果?
正在使用 postgresql 9.3
答案 0 :(得分:1)
我试过这样就产生了正确的结果
SELECT * FROM public.crosstab(
$$VALUES ('na-sales', 'na','sales', 1, 100)
,('na-sales1', 'na','sales1', 1, 1000)
, ('ba-sales', 'ba','sales', 2, 300) order by 1,2 $$
,$$VALUES ('1'), ('2')$$
) AS pivot (t text, n text,na text, co11 int, col2 int)
结果
t N Na col1 col2
na-sales na sales 100
na-sales1 na sales1 1000
ba-sales ba sales 300
答案 1 :(得分:1)
您找到了答案:缺少ORDER BY
条款。在使用crosstab()
的双参数形式时,可以仅使用ORDER BY 1
。对于单参数形式,它需要
ORDER BY 1,2
即使使用双参数形式,也永远不会受到伤害。 The manual instructs:
实际上,SQL查询应始终指定
ORDER BY 1,2
以确保 输入行是否正确排序
详细说明: