Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql postgres表中的数据转置_Postgresql - Fatal编程技术网

Postgresql postgres表中的数据转置

Postgresql postgres表中的数据转置,postgresql,Postgresql,我需要转换数据,如下表所示。我需要在任意数量的列上动态地执行此操作(它们可以有1到100个列),并且我只想转置一些数据。请注意,最多可以有数百万行 我们有这样的新数据(从csv读入临时表): 我们需要使用查询魔术来转换如下结果: id | column_name | value 1 | name | igig 1 | field1 | a 1 | field2 | b 1 | field3

我需要转换数据,如下表所示。我需要在任意数量的列上动态地执行此操作(它们可以有1到100个列),并且我只想转置一些数据。请注意,最多可以有数百万行

我们有这样的新数据(从csv读入临时表):

我们需要使用查询魔术来转换如下结果:

id      | column_name   | value
1       | name          | igig
1       | field1        | a
1       | field2        | b
1       | field3        | cde
2       | name          | ihiuh
2       | field1        | gf
2       | field2        | hi
...

我们希望将此新结果集与另一个表联接。

可以使用JSON操作完成转置:

  • 将值和列名放入一个JSON对象中
  • 将这些列聚合到一个数组中
  • 这些数组元素可以不嵌套,这会导致每个数组元素在行上,但都在同一列中
  • 此列包含所有生成的JSON对象。最后,您可以解析这个JSON列中的原始列名和值,并在两个单独的列中给出它们

  • 魔法

    可以使用JSON操作完成转置:

  • 将值和列名放入一个JSON对象中
  • 将这些列聚合到一个数组中
  • 这些数组元素可以不嵌套,这会导致每个数组元素在行上,但都在同一列中
  • 此列包含所有生成的JSON对象。最后,您可以解析这个JSON列中的原始列名和值,并在两个单独的列中给出它们
  • 魔法

    我们选择了:

    SELECT id,
           unnest(ARRAY['name','field1','field2']) AS field_name,
           unnest(ARRAY["name", "field1", "field2"]) AS new_value
           FROM table
    
    我们选择了:

    SELECT id,
           unnest(ARRAY['name','field1','field2']) AS field_name,
           unnest(ARRAY["name", "field1", "field2"]) AS new_value
           FROM table
    

    所以你只要求换位步骤?在其他情况下,我们需要更好的样本和预期输出。:)所以你只要求换位步骤?在其他情况下,我们需要更好的样本和预期输出。:)我们做了类似的事情,但使用了unnest。我会发布一个答案。这可能有效,但我们的更简单。我们做了类似的事情,但使用了unnest。我会发布一个答案。这可能有效,但我们的更简单。
    SELECT id,
           unnest(ARRAY['name','field1','field2']) AS field_name,
           unnest(ARRAY["name", "field1", "field2"]) AS new_value
           FROM table