2010-05-31 5 views
1

Je suis nouveau dans les baies de PostgreSQL.Poteau 2D PotgreSQL aux rangées

Je suis en train d'une écriture d'une procédure pour convertir les lignes-en-tableau, et je voulais sortie suivante:

 
alphabet | number 
---------+---------- 
     A |  10 
     B |  10 
     C |  6 
     D |  9 
     E |  3 



from following: 


id |          alphabet_series                     
-------+-------------------------------------------------------------------------------------------------- 
    1 | {{A,10},{B,10},{C,6},{D,9},{E,3},{F,9},{I,10},{J,17},{K,16},{L,17},{M,20},{N,13},{O,19}} 

J'ai cherché des fonctions tableau-à-lignes, mais tout semble accepter Tableau 1-d. mais dans ce cas, il s'agit d'un tableau 2-D.

Des pointeurs seront appréciés.

Merci beaucoup.

Répondre

0

Je voudrais créer une table avec 3 champs:

CREATE matrice TABLE ( ROW CHAR, COL INT, VALEUR )

et remplissez-le avec votre matrice alors vous pouvez interroger à l'aide :

SELECT ROW, SUM (VALEUR) à partir de la matrice GROUP BY COLUMN ORDER BY ROW;

ou similaire.

Cela fonctionne bien si la matrice est d'une taille raisonnable (comme des milliards d'éléments)

1
CREATE TABLE two_d (x text, y text); 

CREATE OR REPLACE FUNCTION unnest_2d(anyarray) 
    RETURNS SETOF two_d AS 
$BODY$ 
    SELECT $1[i][1], $1[i][2] FROM 
    generate_series(array_lower($1,1), 
        array_upper($1,1)) i 
$BODY$ 
    LANGUAGE 'sql' IMMUTABLE; 

SELECT * FROM unnest_2d('{{A,a},{B,b}}'::text[][]); 
0
CREATE OR REPLACE FUNCTION unnest_2d(anyarray) 
    RETURNS table(col1 text, col2 text) AS 
$BODY$ 
DECLARE 
    _col1 text[]; 
    _col2 text[]; 
BEGIN 
    _col1 := $1[1:array_length($1, 1)][1:1]; 
    _col2 := $1[1:array_length($1, 1)][2:2]; 
    return query (SELECT * FROM unnest(_col1,_col2)); 
END 
$BODY$ LANGUAGE plpgsql IMMUTABLE; 

SELECT * FROM unnest_2d('{{A,a},{B,b}}'::text[][]); 
Questions connexes