Hallo,
unter
MSSQL und/oder Oracle könnte es in der Form funktionieren:
SQL-Code:
select fkDatum,
Max(Dienst1) as Dienst1,
Max(Dienst2) as Dienst2,
Max(Dienst3) as Dienst3
from
(
select
fkdatum,
case when diensttyp = 1 then DocName else '.' end as Dienst1,
case when diensttyp = 2 then DocName else '.' end as Dienst2,
case when diensttyp = 3 then DocName else '.' end as Dienst3
from
(
select FKDatum,
Diensttyp,
DOCName
from dienste,
docs
where dienste.fkdoc = docs.docid
) intern1
) intern2
group by fkDatum;
Ist halt nur hingedaddelt und nicht getestet.
Kleiner Erklärungsversuch von innen nach außen:
Zuerst die gewünschten Spalten der beiden Tabellen zu einer Ergebnismenge zusammenfügen. Hier erhalten wir pro Datum und Dienst eine Zeile (intern1).
Nun per Case die Dienste auf drei Spalten aufteilen, der Wert zum Dienst geht in die entsprechende Spalte, ist der Diensttyp "unpassend" einen Punkt ausgeben.
Nun haben wir je Datum und Dienst weiterhin eine Zeile, die Dienste aber auf Spalten separiert.
Um das nun zu einer Zeile je Datum zu bekommen, müssen wir den höchsten Wert je Dienst ermitteln und auf Datumsebene gruppieren. Davon ausgehend, dass das '.' immer kleiner ist als DocName, sollte das Ergebnis stimmen. '.' kann durch einen anderen Wert ersetzt werden, der auf jeden Fall kleiner als der kleinste DocName ist.