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:

ProduktID

Název

Katalogová cena

Seřadit podle ceny

749

Silnice-150 Červená, 62

3578.27

1

750

Road-150 Červená, 44

3578.27

1

751

Road-150 Červený, 48

3578.27

1

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

Výrobek

Katalogová cena

Seřadit podle ceny

Bib-Shorts

Pánské Bib-Shorts, S

89.99

1

Bib-Shorts

Pánské Bib-Shorts, M

89.99

1

Stojany na kola

Hitch Rack - 4-Bike

120

1

Kolové stojany

All-Purpose Stojan na kolo

159

1

Láhev a klece

Držák na láhev pro horské kolo

9.99

1

Láhev a klece

Držák na láhev pro silniční kolo

8.99

2

Láhev a klece

Láhev vody - 30 oz.

4,99

3

Dolní závorky

DOLNÍ hranatá závorka HL

121.49

1

Dolní závorky

Dolní závorka ML

101.24

2

Dolní závorky

Ložisko středové osy LL

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 RANK. V závislosti na požadavku se můžete chtít vyhnout remízá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 kTransact-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 kTransact-SQL.