Datenbankabfrage - Alle Spalten gruppieren bzw. alle Werte in einer Spalte

xxGuMMi

Benutzer
Beiträge
8
Hi zusammen,

ich komme einfach nicht auf die Lösung.
Ziel ist es mit einer Datenbankabfrage alle Spalten unabhängig voneinandern zu gruppieren bzw. alle Werte in einer Spalte nur einmal auszuspucken.



vornamenachnamealtertierfarbe
AlbertMustermann22hundrot
BerndMustermann23hundblau
BerndMustermann22hundrot
ThomasMetzger47katzerot
ThomasStein47katzeblau
UweMerkel52katzegelb
UlrikeMetzger17mausblau
UlrikeMerkel35mausblau
UlrikeMerkel35mausblau

Erhoffte Ausgabe:

vorname: Albert, Bernd, Thomas,Uwe, Ulrike
nachname: Musterman, Metzger, Stein, Merkel
alter: 17, 22, 23, 35, 47
tier: hund, katze, maus
farbe: rot, blau, gelb

Ich wäre über einen Lösungsvorschlag super dankbar.

Grüße aus Karlsruhe
 
Werbung:
Code:
edb=*# select * from xxgummi ;
 vname  |   nname    | alter 
--------+------------+-------
 alber  | mustermann |    22
 bernd  | mustermann |    23
 thomas | metzger    |    47
 thomas | stein      |    47
(4 rows)

edb=*# select 'vorname' as spalte, string_agg(distinct vname,', ') from xxgummi union select 'Nachname', string_agg(distinct nname,', ') from xxgummi union select 'Alter', string_agg(distinct alter, ', ') from xxgummi ;
  spalte  |         string_agg         
----------+----------------------------
 Nachname | metzger, mustermann, stein
 Alter    | 22, 23, 47
 vorname  | alber, bernd, thomas
(3 rows)

edb=*# with foo as (select 'vorname' as spalte, string_agg(distinct vname,', ') from xxgummi union select 'Nachname', string_agg(distinct nname,', ') from xxgummi union select 'Alter', string_agg(distinct alter, ', ') from xxgummi ) select spalte || ': ' || string_agg from foo;
               ?column?               
--------------------------------------
 Nachname: metzger, mustermann, stein
 Alter: 22, 23, 47
 vorname: alber, bernd, thomas
(3 rows)

edb=*#

Prost!
 
Hey akretschmer, vielen Dank für Deine superschnelle Antwort und Lösung.

Ich möchte die Ausgabe noch einmal näher spezifizieren und hoffe auf Dein mitwirken :)

Erhoffte Ausgabe:

vornamenachnamealtertierfarbe
AlbertMustermann17hundrot
BerndMetzger22katzeblau
ThomasMerkel23mausgelb
Stein35
47
 
Wie soll aus "Thomas, Metzger,47" nun "Bernd, Metzger,22" werden? Atomkern-Transformation, Alchemie, Beamen? Das ergibt wenig Sinn, was willst Du erreichen? Um disticnte Datensätze zu ermitteln gibt es DISTINCT.

Und warum hast Du im ersten Post 2 mal "Ulrike,Merkel,35,maus,blau"? Warum ist da kein PRIMARY KEY?
 
Entschuldige, ich weiß noch nicht wie ich mich exakt ausdrücken soll.

Mein Ziel ist es, Filter aus bestehenden Datensätzen/Spalten zu generieren.
Ich habe eine Artikeltabelle und möchte über jede Spalte einen Filter generieren können. In der Hoffnung das es mit einer Abfrage funktioniert.

Ein Filter ist hierbei eine Spalte und aus jeder Spalte ein Filterparameter. Mit den Daten möchte ich folgendes aufbauen und abbilden.

FILTER Vorname:
O Albert
O Bernd
O Thomas

FILTER Nachname:
O Mustermann
O Metzger
O Merkel
O Stein

Atomkern-Transformation abgeschlossen ;)
 
bzw. so, wie in meiner ersten Antwort schon gezeigt - das ist 1 Abfrage.
Ich habe einige Versuche unternommen. Jedoch bekomme ich stets einen SQL-Syntax-Fehler :-(

Der Tabellenname lautet artikel
Die Spaltennamen: target, size, brand, ..etc

Aktuell sieht mein Statement so aus:

select 'Target' as spalte, string_agg(distinct target,', ') from artikel union select 'Size', string_agg(distinct size,', ') from artikel union select 'Brand', string_agg(distinct brand, ', ') from artikel
 
Werbung:
Zurück
Oben