多列中的交叉表

时间:2014-10-20 11:51:55

标签: postgresql pivot crosstab postgresql-9.3

这里用样本解释我的问题。

我的样本查询。

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

2 个答案:

答案 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以确保   输入行是否正确排序

详细说明:

相关问题