Utilizarea funcțiilor de ierarhizare și de set de rânduri
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.