2010-12-08 4 views
0

Ich möchte eine Ansicht erstellen, die interessante Dinge über die Systembenutzer anzeigen wird. Unter anderem hat meine Datenbank diese Tabelle, die mehrere Zeilen pro Benutzer hat und im Wesentlichen von 0 bis 3 Zeilen reicht. Jede dieser Zeilen hat ein Zeichenfolgenfeld namens "name", und ich möchte, dass meine Ansicht alle diese durch Kommas getrennten Zeilen enthält. Zum Beispiel:PostgreSQL Ansichten: Abflachung von Datensätzen in eine Spalte

UID Name Concatenation 
1  John A, C 
2  Jack B, C 
3  James 
4  Jill B 

Gibt es eine Möglichkeit aus der anderen Tabelle in diese Spalte zu wählen? Ich benutze PostgreSQL, aber das erscheint mir als generische SQL-Frage.

+0

Was war die Eingabetabelle? –

+0

mögliche Duplikate von [Wie verkette ich Strings eines Stringfeldes in einer PostgreSQL-Gruppe mit 'query?] (Http://stackoverflow.com/questions/43870/how-to-concatenate-strings-of-a-string- field-in-a-postgresql-Gruppe nach Abfrage) –

Antwort

1

Siehe hier:

How to concatenate strings of a string field in a PostgreSQL 'group by' query?

Sie sollten eine neue Aggregatfunktion definieren. Die genaue Funktion hängt von Ihrer Tabellenstruktur, aber hier ist an example from the PostgreSQL forums:

CREATE AGGREGATE textcat_all(
     basetype = text, 
     sfunc  = textcat, 
     stype  = text, 
     initcond = '' 
); 

Sie dieses neue Aggregat in Ihrer Abfrage verwenden kann. Zum Beispiel:

SELECT partner.name, textcat_all(phones.number || ', ') 
     FROM partner LEFT JOIN phones ON partner.id = phones.partner_id 
     GROUP BY partner.name; 
0

Sie irgendeine Art von String-Verkettung Aggregat zum Beispiel verwenden können:

create aggregate concat(basetype = text, 
         sfunc = textcat, 
         stype = text, 
         initcond = ''); 

select name, substring(concat(', '||value, 3) from t group by name; 

aber Sie müssen 9.0 wenn Sie verwenden möchten, eine order by Klausel im Aggregat

Verwandte Themen