Použití funkcí řazení a sady řádků

Dokončeno

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.