Postgresql - 具有可变数字列的CrossTab或Pivot

时间:2012-10-09 13:13:36

标签: sql postgresql

我需要使用带有列变量的数据透视表或交叉表进行查询。有可能吗? 我有下表:

Data_Id ! Description_Column | Value
--------+--------------------+-------
1       ! Column1            ! value1
1       ! Column2            ! value2 
1       ! Column3            ! value3
1       ! Column4            ! value4
2       ! Column1            ! value5
2       ! Column2            ! value6
2       ! Column3            ! value7
2       ! Column4            ! value8

我需要得到

Data_Id ! Column1 ! Column2 ! Column3 ! Column4
1       ! value1  ! value2  ! value3  ! value4
2       ! value5  ! value6  ! value7  ! value8

但有时我会:

Data_Id ! Description_Column | Value
--------+--------------------+-------
3       ! Column1            ! value1
3       ! Column2            ! value2 
4       ! Column1            ! value5
4       ! Column2            ! value6

我需要得到

Data_Id ! Column1 ! Column2 
3       ! value1  ! value2  
4       ! value5  ! value6  

OB的。我需要的行将通过Join选择。所以我将拥有变量列的数量。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您必须记住,SQL计划程序需要在计划时知道粗略的返回行是什么样的。所以你不能直接这样做。

首先,您可以创建一个执行您要执行的操作的函数,并在refcursor中返回结果。这可能是最简单的方法。使用crosstab() contrib模块/扩展中的tablefunc函数。您应该能够基于查询数据生成要运行的SQL查询,但这需要函数内动态SQL,并且您还必须返回一个refcursor。