SQL-Server - 'Kreuztabellenabfragen'
Angenommen man hat folgende Tabelle namens "MeineTabelle":
ZuGruppierendesFeld | Spaltenwert | KritFeld (hier: Datum) |
---|---|---|
Gruppe1 | A | 01.01.2000 |
Gruppe1 | A | 01.02.2000 |
Gruppe1 | B | 01.03.1999 |
Gruppe1 | C | 01.04.1999 |
Gruppe1 | C | 01.05.1999 |
Gruppe2 | A | 01.06.2000 |
Gruppe2 | A | 01.07.2000 |
Gruppe2 | A | 01.08.2000 |
Gruppe2 | B | 01.09.1999 |
Gruppe2 | B | 01.10.2000 |
Gruppe2 | C | 01.11.2000 |
Gruppe2 | C | 01.12.2000 |
Um daraus eine Kreuztabelle zu erstellen, generiert man folgende gespeicherte Prozedur:
CREATE PROCEDURE sp_Kreuztabelle @AuswVon DATETIME, @AuswBis DATETIME AS SELECT ZuGruppierendesFeld, Gesamt=COUNT(ZuGruppierendesFeld), AuswertungVon=MIN(Kritfeld), AuswertungBis=MAX(Kritfeld), A=SUM((CASE Spaltenwert WHEN 'A' THEN 1 ELSE 0 END)), B=SUM((CASE Spaltenwert WHEN 'B' THEN 1 ELSE 0 END)), C=SUM((CASE Spaltenwert WHEN 'C' THEN 1 ELSE 0 END)) FROM MeineTabelle WHERE KritFeld>=@AuswVon and KritFeld<=@AuswBis GROUP BY ZuGruppierendesFeld RETURN GO
Eine Abfrage über den gesamten Datumsbereich liefert dann folgendes Ergebnis:
ZuGruppierendesFeld | Gesamt | AuswertungVon | AuswertungBis | A | B | C |
---|---|---|---|---|---|---|
Gruppe1 | 5 | 01.03.1999 | 01.02.2000 | 2 | 1 | 2 |
Gruppe2 | 7 | 01.09.1999 | 01.12.2000 | 3 | 2 | 2 |
Eine Abfrage über das Jahr 2000 sieht dann so aus:
ZuGruppierendesFeld | Gesamt | AuswertungVon | AuswertungBis | A | B | C |
---|---|---|---|---|---|---|
Gruppe1 | 2 | 01.01.2000 | 01.02.2000 | 2 | 0 | 0 |
Gruppe2 | 6 | 01.06.2000 | 01.12.2000 | 3 | 1 | 2 |
Eine sehr ausführliche Anleitung bzw. verbesserte Form von Kreuztabellenerstellung findet man auch auf http://www.itrain.de/knowhow/sql/tsql/pivot/pivot.asp .