Ausgabe in ein Eintrag

Hoppel

Aktiver Benutzer
Beiträge
38
Hallo Leute,

folgendes SQL-Statement:

Code:
SELECT p.lastName,
    IF((dayname(b.date)='Monday'), 'x', '') as Montag,
    IF((dayname(b.date)='Tuesday'), 'x', '') as Dienstag,
    IF((dayname(b.date)='Wednesday'), 'x', '') as Mittwoch,
    IF((dayname(b.date)='Thursday'), 'x', '') as Donnerstag,
    IF((dayname(b.date)='Friday'), 'x', '') as Freitag
FROM booking b, booked bk, person p
WHERE YEARWEEK(b.date,7)=YEARWEEK('2017-02-14') and b.bookingID = bk.bookingID and bk.PersonID = p.PersonID

liefert mir folgende Ausgabe:

Code:
Nachname Montag Dienstag Mittwoch Donnerstag Freitag
Mustermann    x
Mustermann           x
Mustermann                  x

Soweit so gut, jetzt möchte ich aber, dass für jeden Name nur eine Zeile ausgegeben wird. Also folgendes:

Code:
Nachname Montag Dienstag Mittwoch Donnerstag Freitag
Mustermann   x        x        x

Ist das mit SQL soweit möglich und wenn ja wie?

Vielen Dank schon mal im Voraus und ich freue mich auf Eure Vorschläge/Anregungen!
 
Werbung:
Ja, geht. Einfach noch mal aggregieren.

Code:
test=*# with bla as (select 'max' as name, 'x' as montag, '' as dienstag, '' as mittwoch union all select 'max','','x','' union all select 'max', '','','x') select * from bla; name | montag | dienstag | mittwoch
------+--------+----------+----------
 max  | x  |  |
 max  |  | x  |
 max  |  |  | x
(3 rows)

test=*# with bla as (select 'max' as name, 'x' as montag, '' as dienstag, '' as mittwoch union all select 'max','','x','' union all select 'max', '','','x') select name, array_to_string(array_agg(montag),''), array_to_string(array_agg(dienstag),''), array_to_string(array_agg(mittwoch),'') from bla group by name;
 name | array_to_string | array_to_string | array_to_string
------+-----------------+-----------------+-----------------
 max  | x  | x  | x
(1 row)

Das wäre die Lösung in PostgreSQL.
 
Vielen Dank für den Hinweis:

Code:
SELECT p.lastName, GROUP_CONCAT(IF((dayname(b.date)='Monday'), 'x', '')) as Montag,
                    GROUP_CONCAT(IF((dayname(b.date)='Tuesday'), 'x', '')) as Dienstag,
                    GROUP_CONCAT(IF((dayname(b.date)='Wednesday'), 'x', '')) as Mittwoch,
                    GROUP_CONCAT(IF((dayname(b.date)='Thursday'), 'x', '')) as Donnerstag,
                    GROUP_CONCAT(IF((dayname(b.date)='Friday'), 'x', '')) as Freitag
from booking b, booked bk, person p
WHERE YEARWEEK(b.date,7)=YEARWEEK('2017-02-13') and b.bookingID = bk.bookingID and bk.PersonID = p.PersonID
group by p.lastname

Das funktioniert soweit auch prima, aber einen kleinen Schönheitsfehler hat das ganze. So sieht die Ausgabe aus:
Code:
             Mo        Di       Mi       Do
Mustermann    ,x,,    ,,,x   ,x,,    x,,,
 
Werbung:
Zurück
Oben