Windows oder nicht Windows? Fenster-Funktionen in Transact-SQL

Der SQL Server beherrscht Fenster-Funktionen (Window Functions) mit der charakteristischen Syntax OVER … PARTITION BY schon seit der Version 2005, aber kaum jemand hat sie in der Praxis benutzt. Ein häufiger Grund dafür könnte sein, dass man auf keinen Fall SQL-Statements schreiben möchte, die nicht ANSI-SQL-kompatibel sind, damit man jederzeit den Datenbankserver wechseln kann. Nun gut, die Fenster-Funktionen wurden schon im ISO-Standard SQL:2003 erwähnt, und werden in SQL:2008 näher ausgeführt. Und mit SQL Server 2012 gibt es noch eine Reihe von SQL-Funktionen mehr, die man mit OVER benutzen kann; Grund genug, einen kurzen Blick darauf zu werfen!

Die Fenster-Funktionen unterstützen Konzepte, die die SQL-Sprache normalerweise nicht kennt, wie eine Reihenfolge, ein “vorher/nachher”, und vor allem eine Kombination von einem Detailwert mit einer Aggregation in einer Ergebniszeile! Im Normalfall hat man ja immer ein SELECT für die Detailzeilen und eins mit GROUP BY für die Aggregate; die Fenster-Funktionen können aber beides in derselben Abfrage. Das ist durchaus etwas, was man klassischerweise eher von einem OLAP-Cube erwartet, und die Window-Funktionen könnten durchaus in einigen Fällen eine Alternative sein!