【问题标题】:Converting string to expression in PL/PGSQL在 PL/PGSQL 中将字符串转换为表达式
【发布时间】:2014-04-05 13:55:03
【问题描述】:

我正在尝试将列列表(从信息模式中检索)转换为 PostgreSQL 可识别的表达式。见下图:

columns:= {'column1','column2','column3'};

我应该可以把上面的代码改成:

columns2:= {column1,column2,column3};

我需要这样做才能取消透视水平表,如下所示:

CREATE TABLE tbl1 AS SELECT id, unnest(columns) AS key, unnest(columns2) AS value
FROM tbl_orig;

现在,因为元素是字符串,所以我最终得到的值是列名,而不是值本身。

 id| key |value |
  1|col1 | col1 |

代替

  id | key    |    value    |
   1 |  col1  | val_of_col1 |

我需要这个,因为我正在尝试使用动态检索的列来实现下面的代码:

 CREATE OR REPLACE VIEW vw_zcta_unpivot_ary
 AS 
 SELECT zip
 , unnest(
  array['hu10', 'aland', 'pop10'
 , 'awater', 'intptlat', 'intptlong', 'aland_sqmi', 'awater_sqmi'] 
) AS key
, unnest(
array[hu10::text, aland::text, pop10::text
  , awater::text, intptlat::text, intptlong::text
  , aland_sqmi::text, awater_sqmi::text] 
) AS val
FROM zcta5;

【问题讨论】:

  • 标题表明这是在 pl/pgsql 函数中 - 对吗?你看过动态 SQL 吗?
  • 我怀疑你想要EXECUTE,但真的无法理解你的问题。

标签: postgresql plpgsql


【解决方案1】:

我通过Loop through columns of RECORD 中的代码实现了拥有动态列的需要。

我是这样使用的:

CREATE TABLE tbl2 AS SELECT study,unnest(columns) AS key, unnest_table('tbl_orig') AS value FROM tbl_orig;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多