V SQL Server můžete použít TOP
klauzule k omezení řádků vrácených z dotazu na určité procento sady výsledků.
Můžete například vrátit prvních 10 % výsledků nebo jakékoli procento, které potřebujete.
Příklad 1 – Kompletní sada výsledků
Nejprve vrátíme úplnou sadu výsledků:
SELECT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Výsledek:
+-----------+--------------------------+ | 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 | +-----------+--------------------------+
V úplné sadě výsledků je tedy 22 řádků.
Příklad 2 – Návrat prvních 10 % výsledků
Nyní vraťme prvních 10 procent těchto výsledků:
SELECT TOP(10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Výsledek:
+-----------+-----------------------+ | AlbumId | AlbumName | |-----------+-----------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | +-----------+-----------------------+
V tomto případě jsou vráceny tři řádky.
Můžete si všimnout, že 10 procent z 22 je ve skutečnosti 2,2 (ne 3). Je zřejmé, že SQL Server nemůže prezentovat 2.2 řádky, takže výsledky zaokrouhluje nahoru.
Příklad 2 – Zaokrouhlení nahoru místo dolů
V případě, že vás zajímá, proč SQL Server nezaokrouhluje výsledky dolů kdykoli je zlomková část menší než 5, podívejte se na následující příklad.
SELECT TOP(1) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Výsledek:
+-----------+-------------+ | AlbumId | AlbumName | |-----------+-------------| | 1 | Powerslave | +-----------+-------------+
Pamatujte, že celá sada výsledků měla 22 řádků, takže 1 procento z 22 řádků by znamenalo vrátit 0,22 řádků.
A to je přesně důvod, proč bychom nechtěli být zaokrouhleni dolů. Pokud je 0,22 řádků zaokrouhleno dolů, nebudou vráceny žádné řádky, což nás nesprávně vede k závěru, že pro náš dotaz nebyly nalezeny žádné shody.
Příklad 3 – nula procent
Jak můžete očekávat, použití 0 procent vrátí nula řádků.
SELECT TOP(0) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Výsledek:
(0 rows affected)
Příklad 4 – Maximální procento
Můžete zadat pouze procentuální hodnoty mezi 0 a 100.
Zde je příklad pokusu použít hodnotu vyšší než 100:
SELECT TOP(120) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Výsledek:
Msg 1031, Level 15, State 1, Line 2 Percent values must be between 0 and 100.
Příklad 5 – Záporná procenta
Jak již bylo zmíněno, procentuální hodnoty musí být mezi 0 a 100, takže pokud zadáte záporné procento, zobrazí se chyba.
SELECT TOP(-10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Výsledek:
Msg 1031, Level 15, State 1, Line 3 Percent values must be between 0 and 100.