一种方法是使用复合类型:
CREATE TYPE i2 AS (a int, b int);
或者,为临时使用(在会话期间注册类型):
CREATE TEMP TABLE i2 (a int, b int);
然后,根据需要运行交叉表并分解复合类型:
SELECt client_id , (a0).a AS a0_cur_val, (a0).b AS a0_fut_val , (a1).a AS a1_cur_val, (a1).b AS a1_fut_val , (a2).a AS a2_cur_val, (a2).b AS a2_fut_valFROM crosstab( 'SELECt client_id, asset_type, (current_value, future_value)::i2 FROM foo ORDER BY 1,2' ,'SELECt * FROM generate_series(0,2)' ) AS ct (client_id int, a0 i2, a1 i2, a2 i2);
所有括号都是 必需的 !
基础知识
crosstab():
- PostgreSQL交叉表查询



