我正在尝试将列表列表(从信息架构中检索)转换为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;
答案 0 :(得分:0)
我完成了根据Loop through columns of RECORD找到的代码创建动态列的需求。
我用以下方式使用它:
CREATE TABLE tbl2 AS SELECT study,unnest(columns) AS key, unnest_table('tbl_orig') AS value FROM tbl_orig;