I uge 20/2010 skrev jeg et tip om numre på rækker returneret i SQL. Dengang savnede jeg en funktion, der bare gjorde det. Denne funktion kom allerede DB2 version 9, men godt skjult som en såkaldt OLAP-specification. Det opdagede jeg først for nylig.
Her kommer en revideret udgave af eksemplet fra uge 20/2010:
ROWNUMBER() OVER() er ikke handicappet af de ulemper, der er ved at bruge en SEQUENCE. Første række får nummer 1 og så fremdeles hver gang. Der er ingen begrænsninger med hensyn til ORDER BY, GROUP BY eller DISTINCT. Kort sagt, så virker ROWNUMBER() OVER() præcist som en funktion, der tildeler numre til returnerede rækker, skal.
OLAP-specifications kan i øvrigt bruges til at tildele rækker individuelle placeringer. Man kan opdele rækker i grupper og tildele placeringer inden for hver gruppe. Hvis to rækker fortjener samme placering kan man tildele dem samme placering eller lade være. I DB2 10 er der kommet endnu mere funktionalitet til OLAP-specifications, som du måske kan få glæde af.