I SQL Server kan du bruge TOP
klausul for at begrænse de rækker, der returneres fra en forespørgsel, til en vis procentdel af resultatsættet.
For eksempel kan du returnere de øverste 10 % af resultaterne, eller hvilken procentdel du har brug for.
Eksempel 1 – Det fulde resultatsæt
Lad os først returnere det fulde resultatsæt:
SELECT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultat:
+-----------+--------------------------+ | AlbumId | AlbumName | |-----------+--------------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | | 4 | Ziltoid the Omniscient | | 5 | Casualties of Cool | | 6 | Epicloud | | 7 | Somewhere in Time | | 8 | Piece of Mind | | 9 | Killers | | 10 | No Prayer for the Dying | | 11 | No Sound Without Silence | | 12 | Big Swing Face | | 13 | Blue Night | | 14 | Eternity | | 15 | Scandinavia | | 16 | Long Lost Suitcase | | 17 | Praise and Blame | | 18 | Along Came Jones | | 19 | All Night Wrong | | 20 | The Sixteen Men of Tain | | 21 | Yo Wassup | | 22 | Busted | +-----------+--------------------------+
Så der er 22 rækker i det fulde resultatsæt.
Eksempel 2 – Returner top 10 % af resultaterne
Lad os nu returnere de øverste 10 procent af disse resultater:
SELECT TOP(10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultat:
+-----------+-----------------------+ | AlbumId | AlbumName | |-----------+-----------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | +-----------+-----------------------+
I dette tilfælde returneres tre rækker.
Du vil måske bemærke, at 10 procent af 22 faktisk er 2,2 (ikke 3). Naturligvis kan SQL Server ikke præsentere 2,2 rækker, så det runder resultaterne op.
Eksempel 2 – Afrunding opad i stedet for ned
Hvis du undrer dig over, hvorfor SQL Server ikke runder resultaterne ned når brøkdelen er mindre end 5, så tag et kig på følgende eksempel.
SELECT TOP(1) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultat:
+-----------+-------------+ | AlbumId | AlbumName | |-----------+-------------| | 1 | Powerslave | +-----------+-------------+
Husk, at det fulde resultatsæt havde 22 rækker, så 1 procent af 22 rækker ville betyde, at 0,22 rækker skulle returneres.
Og det er netop derfor, vi ikke ønsker at blive rundet ned. Hvis 0,22 rækker rundes ned, vil der ikke blive returneret nogen rækker, hvilket fejlagtigt får os til at konkludere, at der ikke var nogen match for vores forespørgsel.
Eksempel 3 – Nul procent
Som du måske forventer, vil brug af 0 procent returnere nul rækker.
SELECT TOP(0) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultat:
(0 rows affected)
Eksempel 4 – Maksimal procentdel
Du kan kun angive procentværdier mellem 0 og 100.
Her er et eksempel på forsøg på at bruge en værdi højere end 100:
SELECT TOP(120) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultat:
Msg 1031, Level 15, State 1, Line 2 Percent values must be between 0 and 100.
Eksempel 5 – Negative procenter
Som nævnt skal procentværdier være mellem 0 og 100, så du får en fejl, hvis du angiver en negativ procentdel.
SELECT TOP(-10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultat:
Msg 1031, Level 15, State 1, Line 3 Percent values must be between 0 and 100.