akretschmer
Datenbank-Guru
- Beiträge
- 10.376
Ja das hatte ich mir ja auch schon gedacht. Hab jetzt auf GROUP_CONCAT zurückgegriffen. Das ist dafür da um mehrere Spalten in EINEM String auszugeben. Also genau das was ich will. Nur jetzt Hab ich ein Problem, dass in der Ausgabe irgendwelche Nullen auftauchen:
Und die Nullen sind auch genau so "willkürlich" wie ich es versucht habt anzudeuten. Mal sind sie vorn und mal hinten. Deshalb kann ich mir er nicht erklären wo sie hingehören.Code:Name | Januar | Februar -------+------------------+------------------ Hans | 0, 07.01. 10 EUR | 08.02 10 EUR, 0 Karl | 19.01. 10 EUR, 0 | 0, 10.02. 10 EUR
Aber ich komme der Sache näher und dafür danke ich dir schon einmal
Normal durch die Aggregation, je nachdem wie oft ein Wert in der gruppierten Spalte vorkommt. In meiner Lösung erzeuge ich zuerst ein ARRAY, welches ich dann zu einem STRING wandle. Die array_to_string() - Funktion blendet leere Werte im Array aus.
Code:
test=*# select
test-# m.name,
test-#
test-# array_agg(
test(# case when extract(month from fuer) = 1 then am::text || ' ' || to_char(fuer,'TMMonth') || ' ' || betrag::text || ' EUR' else null end
test(# )
test-# as januar,
test-# array_to_string(
test(# array_agg(
test(# case when extract(month from fuer) = 2 then am::text || ' ' || to_char(fuer,'TMMonth') || ' ' || betrag::text || ' EUR' else null end
test(# ),', '
test(# ) as februar
test-# from
test-# mitglieder m
test-# left join (
test(# select * from zahlungen where fuer < '2014-01-01'::date
test(# ) z on (m.id=z.mitglied_id)
test-# group by m.name;
name | januar | februar
-------+-------------------------------------------------------+---------------------------
hans | {"2013-01-15 Januar 10 EUR"} |
ich | {NULL} |
peter | {"2013-01-10 Januar 5 EUR","2013-02-15 Januar 5 EUR"} |
uwe | {"2013-02-15 Januar 10 EUR",NULL} | 2013-02-20 Februar 10 EUR
(4 rows)
Beim uwe ist da auch ein NULL-Wert im Array, wenn ich nur das Array ausgebe.