Zum Inhalt dieser Seite

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 .