我怎样才能打破查询结果为单独列?(How can I break down query result

2019-08-02 03:10发布

从我刚才的问题跟进:

在表中的列中插入的光栅记录像素值

想象一下,我查询结果有5300行作为类似的结果:

+-------+ 
|value  |
+-------+
| 15624 |
| 15899 |
| 56267 |
| 85955 |
+-------+

我想他们是在一个表和第一排53中val1列,第二行53中val2柱等。 最后,我将在我的表100个新列。 这可能吗? 如果是这样,我怎么能实现呢?

Answer 1:

下面是一个使用多维数组可能有点理智的做法 。

请永远,永远,永远,永远使用以下查询:

CREATE EXTENSION tablefunc;

SELECT * FROM crosstab(
  'SELECT ''row1''::text, width_bucket(x, 1, 53001, 100), array_agg(x order by x)::integer[] from generate_series(1,53000) x GROUP BY 2'
) ct(
 rowname text,
    col1 integer[], col2 integer[], col3 integer[], col4 integer[], col5
    integer[], col6 integer[], col7 integer[], col8 integer[], col9 integer[],
    col10 integer[], col11 integer[], col12 integer[], col13 integer[], col14
    integer[], col15 integer[], col16 integer[], col17 integer[], col18 integer[],
    col19 integer[], col20 integer[], col21 integer[], col22 integer[], col23
    integer[], col24 integer[], col25 integer[], col26 integer[], col27 integer[],
    col28 integer[], col29 integer[], col30 integer[], col31 integer[], col32
    integer[], col33 integer[], col34 integer[], col35 integer[], col36 integer[],
    col37 integer[], col38 integer[], col39 integer[], col40 integer[], col41
    integer[], col42 integer[], col43 integer[], col44 integer[], col45 integer[],
    col46 integer[], col47 integer[], col48 integer[], col49 integer[], col50
    integer[], col51 integer[], col52 integer[], col53 integer[], col54 integer[],
    col55 integer[], col56 integer[], col57 integer[], col58 integer[], col59
    integer[], col60 integer[], col61 integer[], col62 integer[], col63 integer[],
    col64 integer[], col65 integer[], col66 integer[], col67 integer[], col68
    integer[], col69 integer[], col70 integer[], col71 integer[], col72 integer[],
    col73 integer[], col74 integer[], col75 integer[], col76 integer[], col77
    integer[], col78 integer[], col79 integer[], col80 integer[], col81 integer[],
    col82 integer[], col83 integer[], col84 integer[], col85 integer[], col86
    integer[], col87 integer[], col88 integer[], col89 integer[], col90 integer[],
    col91 integer[], col92 integer[], col93 integer[], col94 integer[], col95
    integer[], col96 integer[], col97 integer[], col98 integer[], col99 integer[],
    col100 integer[]
);

解决这个问题的正确方法是几乎可以肯定在你的应用程序 。 SQL是擅长很多事情。 这是不是其中之一,尤其是在与PostgreSQL的非常有限支点的支持。 在任何数据库,这将是一个疯狂的事情。

就我而言,如果我要使用查询只生成列清单,这是该系统被迫做一些事情是不适合的迹象:

select string_agg('col'||n||' integer[]',', ') FROM generate_series(1,100) n;


文章来源: How can I break down query result into separate columns?