Brug rangerings- og rækkesætfunktioner
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.