Sql pivot中的可变列数
我有两张桌子 第一个表是字典:Sql pivot中的可变列数,sql,postgresql,crosstab,Sql,Postgresql,Crosstab,我有两张桌子 第一个表是字典: test_1=> select * from first; id | name ----+------- 1 | name1 2 | name2 3 | name3 参考第一个表的第二个表: 现在我使用pivot显示结果: SELECT * FROM crosstab('SELECT number, name, sum(number)::integer FROM first LEFT JOIN second ON second.f
test_1=> select * from first;
id | name
----+-------
1 | name1
2 | name2
3 | name3
参考第一个表的第二个表:
现在我使用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…,但列是可以更改的表单字典表
所以我的问题是-有没有可能让列动态地透视?您是否考虑过返回JSON而不是本机列?当你这样做的时候,它是非常灵活的。不,我不知道这个技巧。你能举个例子吗?
number | name1 | name2 | name3
--------+-------+-------+-------
1 | | 2 | 1
2 | | 2 | 2
3 | | | 3