Použití funkcí řazení a sady řádků
Funkce řazení a sady řádků nejsou skalární funkce, protože nevrací jednu hodnotu. Tyto funkce přijímají sadu řádků jako vstup a vrací sadu řádků jako výstup.
Funkce řazení
Funkce řazení umožňují provádět výpočty s uživatelsky definovanou sadou řádků. Mezi tyto funkce patří řazení, posun, agregace a distribuční funkce.
Tento příklad používá funkci RANK k výpočtu pořadí na základě hodnoty ListPrice s nejvyšší cenou seřazenou na 1:
SELECT TOP 100 ProductID, Name, ListPrice,
RANK() OVER(ORDER BY ListPrice DESC) AS RankByPrice
FROM Production.Product AS p
ORDER BY RankByPrice;
Výsledky dotazu můžou vypadat takto:
ProductID
Název
ListPrice
RankByPrice
749
Road-150 Red, 62
3578.27
0
750
Road-150 Red, 44
3578.27
0
751
Road-150 Red, 48
3578.27
0
771
Mountain-100 Silver, 38
3399.99
4
772
Mountain-100 Silver, 42
3399.99
4
775
Mountain-100 Black, 38
3374.99
6
...
...
...
...
PŘES
Klauzuli OVER můžete použít k definování oddílů nebo seskupení v rámci dat. Následující dotaz například rozšiřuje předchozí příklad tak, aby vypočítal pořadí na základě cen pro produkty v rámci každé kategorie.
SELECT c.Name AS Category, p.Name AS Product, ListPrice,
RANK() OVER(PARTITION BY c.Name ORDER BY ListPrice DESC) AS RankByPrice
FROM Production.Product AS p
JOIN Production.ProductCategory AS c
ON p.ProductCategoryID = c.ProductcategoryID
ORDER BY Category, RankByPrice;
Výsledky tohoto dotazu můžou vypadat přibližně takto:
Kategorie
Produkt
ListPrice
RankByPrice
Bib-Shorts
Pánské Bib-Shorts, S
89.99
0
Bib-Shorts
Pánské Bib-Shorts, M
89.99
0
Stojany na kola
Hitch Rack - 4-Bike
120
0
Kolové stojany
Stojan na kola pro všechny účely
159
0
Láhev a klece
Mountain Bottle Cage
9.99
0
Láhev a klece
Road Bottle Cage
8.99
2
Láhev a klece
Láhev vody - 30 oz.
4.99
3
Bottom Brackets
DOLNÍ hranatá závorka HL
121.49
0
Bottom Brackets
Dolní závorka ML
101.24
2
Bottom Brackets
LL Bottom Bracket
53.99
3
...
...
...
...
Poznámka:
Všimněte si, že několik řádků má stejnou hodnotu pořadí a některé hodnoty se přeskočí. Je to proto, že používáme pouze pořadí. V závislosti na požadavku se můžete chtít vyhnout vazbám ve stejné hodnotě pořadí. Hodnotu pořadí můžete řídit jinými funkcemi, DENSE_RANK, NTILE a ROW_NUMBER podle potřeby. Podrobnosti o těchto funkcích najdete v referenční dokumentaci jazyka Transact-SQL.
Funkce sady řádků
Funkce sady řádků vrací virtuální tabulku, kterou lze použít v klauzuli FROM jako zdroj dat. Tyto funkce přebírají parametry specifické pro samotnou funkci sady řádků. Zahrnují OPENDATASOURCE, OPENQUERY, OPENROWSET, OPENXML a OPENJSON.
Funkce OPENDATASOURCE, OPENQUERY a OPENROWSET umožňují předávat dotaz na vzdálený databázový server. Vzdálený server pak vrátí sadu výsledných řádků. Následující dotaz například používá OPENROWSET k získání výsledků dotazu z instance SQL Serveru s názvem SalesDB.
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=SalesDB;Trusted_Connection=yes;',
'SELECT Name, ListPrice
FROM AdventureWorks.Production.Product') AS a;
Pokud chcete používat vzdálené servery, musíte v instanci SQL Serveru, ve které spouštíte dotaz, povolit některé pokročilé možnosti.
Funkce OPENXML a OPENJSON umožňují dotazovat se na strukturovaná data ve formátu XML nebo JSON a extrahovat hodnoty do tabulkové sady řádků.
Podrobný průzkum funkcí sady řádků je nad rámec tohoto modulu. Další informace najdete v referenční dokumentaci jazyka Transact-SQL.