2014-04-04 48 views
0

我想將列表(從信息模式中檢索到)轉換爲可由PostgreSQL識別的表達式。參見下圖:將字符串轉換爲PL/PGSQL中的表達式

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

我應該可以改變上面的代碼爲:

columns2:= {column1,column2,column3}; 

我需要這樣做是爲了讓我UNPIVOT水平表如下所示:

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; 
+2

標題表明這是一個PL/pgSQL函數裏面 - 是正確的?你看過動態SQL嗎? – harmic

+0

我懷疑你想'EXECUTE',但是真的不能遵循你的問題。 –

回答

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; 
相關問題