我想在PostgreSQL中转置以下数据。
第2列-代表表格ref,第3列代表表格单元格ref,第4列代表表格行,第5列代表值。
所需的输出为
p_164 2017 2018
p_164 £ £
p_164 6,819,277 6,292,030
etc.
行数(第4列)是可变的
源数据
1803147 p_164 42955214 0 2017
1803147 p_164 42955215 0 2016
1803147 p_164 42955216 1 £
1803147 p_164 42955217 1 £
1803147 p_164 42955218 2 6,819,277
1803147 p_164 42955219 2 6,292,030
1803147 p_164 42955220 3 (395,131)
1803147 p_164 42955221 3 (509,444)
1803147 p_164 42955222 4 6,424,146
1803147 p_164 42955223 4 5,782,586
1803147 p_164 42955224 5 (5,841,975)
1803147 p_164 42955225 5 (5,433,515)
1803147 p_164 42955226 6 582,171
1803147 p_164 42955227 6 349,071
1803147 p_164 42955228 7 -
1803147 p_164 42955229 7 6
1803147 p_164 42955230 8 (25,346)
1803147 p_164 42955231 8 (38,773)
1803147 p_164 42955232 9 556,825
1803147 p_164 42955233 9 . 310,304
1803147 p_164 42955234 10 40,962
1803147 p_164 42955235 10 49,704
1803147 p_164 42955236 11 597,787
1803147 p_164 42955237 11 360,008
1803147 p_164 42955238 12 597,787
1803147 p_164 42955239 13 597,787
1803147 p_164 42955240 13 360,008
1803147 p_164 42955241 14 (47,412)
1803147 p_164 42955242 14 (796)
1803147 p_164 42955243 15 645,199
1803147 p_164 42955244 15 360,804
1803147 p_164 42955245 16 597,787
1803147 p_164 42955246 16 360,008
1803147 p_164 42955247 17 (47,412)
1803147 p_164 42955248 17 (796)
1803147 p_164 42955249 18 645,199
1803147 p_164 42955250 18 360,804
1803147 p_164 42955251 19 597,787
1803147 p_164 42955252 19 360,008
1803148 p_249 42955253 0
1803148 p_249 42955254 0 Note
1803148 p_249 42955255 0
1803148 p_249 42955256 0 2017£
1803148 p_249 42955257 0
1803148 p_249 42955258 0 2016£
1803148 p_249 42955259 1 FIXED ASSETS
答案 0 :(得分:0)
除非您有固定(或至少有限)的列数,否则您无法真正进行转置或交叉制表。
也就是说,我认为您可以通过使用PostgreSQL的数组完全完成您要尝试的操作。
select col_2, array_agg (col_5) as col_5_values
from source_table
group by col_2, col_4
我认为您会发现解构值非常容易。例如array [2](col_5_values[2]
)给出了数组中的第二个元素。