2013-05-27 61 views
1

是否有任何簡單的方法將postgres錶轉換爲2維?postgres行到2維數組

我有兩列foo和bar數據表foobar的,其在 1,2 3,4 5,6

以下數據我想將它轉換成

{ 
{1,2}, 
{3,4}, 
{5,6} 
} 

我從foobar的試圖像

選擇ARRAY [富,巴]東西

這產生

{1,2} 
{3,4} 
{5,6} 

這是近有

我懷疑,我將不得不寫pgpsql函數來做到這一點?有什麼建議麼?

回答

2

這裏就是我做了LedgerSMB:

CREATE AGGREGATE compound_array (
     BASETYPE = ANYARRAY, 
     STYPE = ANYARRAY, 
     SFUNC = ARRAY_CAT, 
     INITCOND = '{}' 
); 

然後,您可以:

select compound_array(ARRAY[[foo,bar]]) from foobar; 

注意,你需要有兩對括號的,否則它只是增加了他們的一維數組。

+0

從postgresql 9.5開始,你也可以用array_agg做到這一點。請參閱https://www.postgresql.org/docs/devel/static/functions-aggregate.html#FUNCTIONS-AGGREGATE-TABLE –

1
create or replace function my_array() 
returns integer[] as $function$ 
declare 
    r record; 
    a integer[]; 
begin 

    for r in 
     select foo, bar 
     from (values 
      (1, 2), (3, 4), (5, 6) 
     ) foobar (foo, bar) 
    loop 
     a := a || array[[r.foo, r.bar]]; 
    end loop; 

    return a; 

end; 
$function$ language plpgsql; 

select my_array(); 
     my_array  
--------------------- 
{{1,2},{3,4},{5,6}} 

select (my_array())[2][2]; 
my_array 
---------- 
     4 
+0

更容易創建基於現有PostgreSQL功能的聚合;-) –

+0

感謝您的答案,我想出了一個不同的解決方案 – Dave