Brug rangerings- og rækkesætfunktioner

Fuldført

Rangerings- og rækkesætfunktioner er ikke skalarfunktioner, fordi de ikke returnerer en enkelt værdi. Disse funktioner accepterer et sæt rækker som input og returnerer et sæt rækker som output.

Rangeringsfunktioner

Rangeringsfunktioner giver dig mulighed for at udføre beregninger i forhold til et brugerdefineret sæt rækker. Disse funktioner omfatter rangerings-, forskydnings-, aggregerings- og distributionsfunktioner.

I dette eksempel bruges funktionen RANK til at beregne en rangering baseret på ListPrice, hvor den højeste pris er placeret som 1:

SELECT TOP 100 ProductID, Name, ListPrice,
RANK() OVER(ORDER BY ListPrice DESC) AS RankByPrice
FROM Production.Product AS p
ORDER BY RankByPrice;

Forespørgselsresultaterne kan se ud som følger:

Instruktion

Navn

Listepris

RankByPrice

749

Vej-150 Rød, 62

3578.27

0

750

Vej-150 Rød, 44

3578.27

0

751

Vej-150 Rød, 48

3578.27

0

771

Bjerg-100 Sølv, 38

3399.99

4

772

Bjerg-100 Sølv, 42

3399.99

4

775

Bjerg-100 Sort, 38

3374.99

6

...

...

...

...

OVER

Du kan bruge OVER-delsætningen til at definere partitioner eller grupperinger i dataene. Følgende forespørgsel udvider f.eks. det forrige eksempel til at beregne prisbaserede rangeringer for produkter inden for hver kategori.

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;

Resultaterne af denne forespørgsel kan se nogenlunde sådan ud:

Kategori

Produkt

Listepris

RankByPrice

Bib-Shorts

Cykelshorts til mænd, S

89.99

0

Bib-Shorts

Cykelshorts til mænd, M

89.99

0

Cykelstativer

Hitch Rack - 4-cykel

120

0

Cykelstativer

All-Purpose cykelholder

159

0

Flasker og bure

Mountain flaskebur

9.99

0

Flasker og bure

Flaskebur til landevejen

8.99

2

Flasker og bure

Vandflaske - 30 ounce.

4.99

3

Nederste kantede parenteser

HL-bundparentes

121.49

0

Nederste kantede parenteser

ML-nederste kantede parentes

101.24

2

Nederste kantede parenteser

Ll-nederste kantede parentes

53.99

3

...

...

...

...

Seddel

Bemærk, at flere rækker har samme rangværdi, og at nogle værdier springes over. Det skyldes, at vi kun bruger RANK. Afhængigt af kravet kan det være en god idé at undgå bånd med den samme rangordningsværdi. Du kan styre rangeringsværdien med andre funktioner, DENSE_RANK, NTILE og ROW_NUMBER efter behov. Du kan finde flere oplysninger om disse funktioner i dokumentationen tilTransact-SQL reference.

Funktioner i rækkesæt

Rækkesætfunktioner returnerer en virtuel tabel, der kan bruges i FROM-delsætningen som en datakilde. Disse funktioner tager parametre, der er specifikke for selve funktionen rowset. De omfatter OPENDATASOURCE, OPENQUERY, OPENROWSET, OPENXML og OPENJSON.

Funktionerne OPENDATASOURCE, OPENQUERY og OPENROWSET giver dig mulighed for at sende en forespørgsel til en ekstern databaseserver. Fjernserveren returnerer derefter et sæt resultatrækker. Følgende forespørgsel bruger f.eks. OPENROWSET til at hente resultaterne af en forespørgsel fra en SQL Server-forekomst med navnet SalesDB.

SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=SalesDB;Trusted_Connection=yes;',
    'SELECT Name, ListPrice
    FROM AdventureWorks.Production.Product') AS a;

Hvis du vil bruge fjernservere, skal du aktivere nogle avancerede indstillinger i den SQL Server-forekomst, hvor du kører forespørgslen.

Funktionerne OPENXML og OPENJSON giver dig mulighed for at forespørge strukturerede data i XML- eller JSON-format og udtrække værdier i et tabellarisk rækkesæt.

En detaljeret udforskning af rækkesætfunktioner ligger uden for dette moduls område. Du kan få flere oplysninger i dokumentationen tilTransact-SQL reference.