Utilizarea funcțiilor de ierarhizare și de set de rânduri

Finalizat

Funcțiile de ierarhizare și de set de rânduri nu sunt funcții scalare, deoarece nu returnează o singură valoare. Aceste funcții acceptă un set de rânduri ca intrare și returnează un set de rânduri ca ieșire.

Funcții de ierarhizare

Funcțiile de ierarhizare vă permit să efectuați calcule în raport cu un set de rânduri definit de utilizator. Aceste funcții includ funcțiile de ierarhizare, deplasare, agregată și distribuție.

Acest exemplu utilizează funcția RANK pentru a calcula o ierarhizare bazată pe ListPrice, cu cel mai mare preț evaluat la 1:

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

Rezultatele interogării pot arăta astfel:

Productid

Nume

Preț Listă

RankByPrice

749

Drum-150 Roșu, 62

3578.27

1

750

Drum-150 Roșu, 44

3578.27

1

751

Drum-150 Roșu, 48

3578.27

1

771

Munte-100 Argintiu, 38

3399.99

4

772

Munte-100 Argintiu, 42

3399.99

4

775

Munte-100 Negru, 38

3374.99

6

...

...

...

...

PESTE

Puteți utiliza clauza OVER pentru a defini partiții sau grupări din date. De exemplu, următoarea interogare extinde exemplul anterior pentru a calcula clasamentele bazate pe preț pentru produsele din fiecare 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;

Rezultatele acestei interogări pot arăta astfel:

Categorie

Produs

Preț Listă

RankByPrice

Bib-Shorts

Bib-Shorts bărbați, S

89.99

1

Bib-Shorts

Bib-Shorts bărbați, M

89.99

1

Rasteluri pentru biciclete

Rastel autostop - 4 biciclete

120

1

Standuri pentru bicicletă

suport pentru biciclete All-Purpose

159

1

Sticle și cuști

Cușcă de sticlă montană

9.99

1

Sticle și cuști

Cuscă de sticlă rutieră

8.99

2

Sticle și cuști

Sticlă de apă - 30 oz.

4.99

3

Paranteze inferioare

Paranteză inferioară HL

121.49

1

Paranteze inferioare

Paranteză inferioară ML

101.24

2

Paranteze inferioare

Paranteză inferioară LL

53.99

3

...

...

...

...

Notă

Observați că mai multe rânduri au aceeași valoare de rang și unele valori sunt ignorate. Asta pentru că folosim doar RANK. În funcție de cerință, se recomandă să evitați legăturile la aceeași valoare de rang. Puteți controla valoarea rangului cu alte funcții, DENSE_RANK, NTILE și ROW_NUMBER, după cum este necesar. Pentru detalii despre aceste funcții, consultați documentația de referințăTransact-SQL.

Funcții set de rânduri

Funcțiile Rowset returnează un tabel virtual care poate fi utilizat în clauza FROM ca sursă de date. Aceste funcții preiau parametri specifici funcției rowset în sine. Printre acestea se numără OPENDATASOURCE, OPENQUERY, OPENROWSET, OPENXML și OPENJSON.

Funcțiile OPENDATASOURCE, OPENQUERY și OPENROWSET vă permit să transmiteți o interogare la un server de baze de date la distanță. Serverul la distanță va returna apoi un set de rânduri de rezultate. De exemplu, următoarea interogare utilizează OPENROWSET pentru a obține rezultatele unei interogări dintr-o instanță SQL Server denumită SalesDB.

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

Pentru a utiliza servere la distanță, trebuie să activați unele opțiuni complexe în instanța SQL Server în care rulați interogarea.

Funcțiile OPENXML și OPENJSON vă permit să interogați datele structurate în format XML sau JSON și să extrageți valori într-un set de rânduri tabelare.

O explorare detaliată a funcțiilor setului de rânduri depășește domeniul acestui modul. Pentru mai multe informații, consultați documentația de referințăTransact-SQL.