【发布时间】: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