pivot中的列数可变

时间:2015-02-09 09:10:32

标签: sql postgresql crosstab

我有两张桌子。

第一张表是字典:

test_1=> select * from first;
 id | name  
----+-------
  1 | name1
  2 | name2
  3 | name3

引用first表的第二个表:

test_1=> select * from second;
 id | number | first_id 
----+--------+----------
  1 |      1 |        2
  2 |      1 |        3
  3 |      1 |        2
  4 |      2 |        3
  5 |      2 |        2
  6 |      3 |        3

现在我使用pivot来显示结果:

SELECT *
FROM crosstab('SELECT
  number, name, sum(number)::integer
FROM first
  LEFT JOIN second ON second.first_id = first.id
GROUP BY 2, 1
ORDER BY 1, 2', $$SELECT unnest('{name1,name2,name3}'::text[])$$) AS ta (
     number INTEGER,
     name1 INTEGER,
     name2 INTEGER,
     name3 INTEGER
     );

结果:

 number | name1 | name2 | name3 
--------+-------+-------+-------
      1 |       |     2 |     1
      2 |       |     2 |     2
      3 |       |       |     3

没关系。

但是现在我必须手动定义列 - name1, name2, name3...,但列是表单字典表,可以更改。

所以我的问题是 - 有可能让列动态转动吗?

0 个答案:

没有答案