这是我的数据
id|col_name|value|
--+--------+-----+
1|col1 |ABC |
2|col2 |DEF |
2|col2 |FGH |
2|col2 |IJK |
3|col3 |MNO |
3|col3 |PQR |
3|col3 |STU |
3|col3 |XYZ |
预期输出为
id Col1 Col2 col3
1 ABC DEF MNO
2 NULL FGH PQR
2 NULL IJK STU
2 NULL NULL XYZ
3 NULL NULL NULL
3 NULL NULL NULL
我尝试了如下所示的查询,但遇到了一个异常:
错误:返回和sql元组描述不兼容
这是我尝试的查询:
select
*
from
crosstab ('select id,col_name,value from hr.temp order by 1,2')
AS final_result(id int, col1 TEXT, col2 TEXT, col3 TEXT);
2条答案
按热度按时间ycl3bljg1#
您并不是在执行
PIVOT
,而是根据三列中的值的顺序(而不是某些分组标准)对它们进行排序。67up9zun2#
当然不是
crosstab()
的简单情况,这似乎符合以下模式:fiddle
但这实际上只是一个猜测,而问题是不确定的。
行的顺序是一致的,同时也是不确定的。
使用
ROWS UNBOUNDED PRECEDING
时,我加入了一点分泌的酱料,使它更快。此优化将自动运行in Postgres 16.:)