Classificatie- en rijsetfuncties gebruiken

Voltooid

Classificatie- en rijsetfuncties zijn geen scalaire functies omdat ze geen enkele waarde retourneren. Deze functies accepteren een set rijen als invoer en retourneren een set rijen als uitvoer.

Classificatiefuncties

Met classificatiefuncties kunt u berekeningen uitvoeren op basis van een door de gebruiker gedefinieerde set rijen. Deze functies omvatten classificatie-, offset-, statistische en distributiefuncties.

In dit voorbeeld wordt de functie RANK gebruikt om een rangschikking te berekenen op basis van de ListPrice, waarbij de hoogste prijs is gerangschikt op 1:

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

De queryresultaten kunnen er als volgt uitzien:

ProductID

Naam

Lijstprijs

RankByPrice

749

Road-150 Rood, 62

3578.27

1

750

Road-150 Rood, 44

3578.27

1

751

Road-150 Rood, 48

3578.27

1

771

Berg-100 zilver, 38

3399.99

4

772

Berg-100 zilver, 42

3399.99

4

775

Berg-100 zwart, 38

3374.99

6

...

...

...

...

EINDE

U kunt de OVER-component gebruiken om partities of groeperingen in de gegevens te definiƫren. Met de volgende query wordt bijvoorbeeld het vorige voorbeeld uitgebreid om classificaties op basis van prijzen te berekenen voor producten binnen elke categorie.

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;

De resultaten van deze query kunnen er ongeveer als volgt uitzien:

Categorie

Product

Lijstprijs

RankByPrice

bibshorts

Heren bib-shorts, S

89.99

1

bibshorts

Heren fietsbroek, M

89.99

1

Fietsenrekken

Trekhaakrek - 4 fietsen

120

1

Fietsstandaarden

All-Purpose fietsstandaard

159

1

Flessen en kooien

Mountainbike bidonhouder

9.99

1

Flessen en kooien

Flessenhouder voor racefiets

8.99

2

Flessen en kooien

Waterfles - 30 oz.

4,99

3

Onderhaken

HL-onderhaak

121.49

1

Onderhaken

ML-onderhaak

101.24

2

Onderhaken

LL-onderhaak

53.99

3

...

...

...

...

Opmerking

U ziet dat meerdere rijen dezelfde rangschikkingswaarde hebben en sommige waarden worden overgeslagen. Dit komt omdat we alleen RANK gebruiken. Afhankelijk van de vereiste wilt u mogelijk ties voorkomen met dezelfde rangschikkingswaarde. U kunt de rangschikkingswaarde zo nodig beheren met andere functies, DENSE_RANK, NTILE en ROW_NUMBER. Zie de Transact-SQL referentiedocumentatie voor meer informatie over deze functies.

Rijensetfuncties

Rowset-functies retourneren een virtuele tabel die als gegevensbron kan worden gebruikt in de FROM-component. Deze functies hebben parameters die specifiek zijn voor de rijsetfunctie zelf. Ze omvatten OPENDATASOURCE, OPENQUERY, OPENROWSET, OPENXML en OPENJSON.

Met de functies OPENDATASOURCE, OPENQUERY en OPENROWSET kunt u een query doorgeven aan een externe databaseserver. De externe server retourneert vervolgens een set resultaatrijen. De volgende query maakt bijvoorbeeld gebruik van OPENROWSET om de resultaten van een query op te halen uit een SQL Server-exemplaar met de naam SalesDB.

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

Als u externe servers wilt gebruiken, moet u enkele geavanceerde opties inschakelen in het SQL Server-exemplaar waarop u de query uitvoert.

Met de functies OPENXML en OPENJSON kunt u gestructureerde gegevens opvragen in XML- of JSON-indeling en waarden extraheren in een rijenset in tabelvorm.

Een gedetailleerde verkenning van rijensetfuncties valt buiten het bereik van deze module. Zie de Transact-SQL referentiedocumentatie voor meer informatie.