Hallo,
ich möchte in einer Auswertung ein (Linien-)Diagramm für die Übersicht einer Stundenkontenentwicklung anzeigen, und das für derzeit 18 Abteilungen. Das Diagramm habe ich bereits, und auch die Linien werden mir angezeigt. Der Code dafür sieht in etwa so aus:
SELECT A.Stichtag, Sum(IIF(A.Abteilung='F11',A.Std,Null)) As F11, Sum(IIF(A.Abteilung='F12',A.Std,Null)) AS F12, (...) FROM tbl_Stundenkonten A WHERE A.Stichtag BETWEEN (...) GROUP BY A.Stichtag (...)
Das ist aber zu statisch, da ich ja nicht garantieren kann, ob nicht irgendwann mal Abteilungen hinzukommen. Wie kann ich den String so schreiben, dass alle vorkommenden Abteilungen berücksichtigt werden? Für die Abteilungen gäbe es eine eigene Tabelle, aus der ersichtlich ist, welche Abteilungen es bei uns gibt.
Stichwort: Kreuztabellenabfrage.
Gegeben sei:
abteilung stdkonto stichtag | abteilung | std | 20.03.2017 | F11 | 413,5 | 20.03.2017 | F13 | 221 | 20.03.2017 | F14 | 312,75 | 20.03.2017 | F20 | 132 | 21.03.2017 | F11 | 398 | 21.03.2017 | F20 | 141 |
|
|
TRANSFORM SUM(k.std) AS s
SELECT k.stichtag
FROM abteilung a
LEFT JOIN stdkonto k
ON a.abteilung = k.abteilung
GROUP BY k.stichtag
PIVOT a.abteilung;
liefert dann (leider mit einer Zeile mit Nullwerten (von mir wegen der Forendarstellung gekennzeichnet).
q stichtag | F11 | F12 | F13 | F14 | F20 | (null)
| (null)
| (null)
| (null)
| (null)
| (null)
| 20.03.2017 | 413,5 | (null)
| 221 | 312,75 | 132 | 21.03.2017 | 398 | (null)
| (null)
| (null)
| 141 | Mit einer weiteren Abfrage kann man aber aufräumen. q_final stichtag | F11 | F12 | F13 | F14 | F20 | 20.03.2017 | 413,5 | (null)
| 221 | 312,75 | 132 | 21.03.2017 | 398 | (null)
| (null)
| (null)
| 141 |
|
|
SELECT *
FROM q
WHERE stichtag IS NOT NULL;