Verwenden von Rangfolge- und Rowsetfunktionen
Rangfolgen- und Rowsetfunktionen sind keine skalaren Funktionen, da sie keinen einzelnen Wert zurückgeben. Diese Funktionen akzeptieren eine Reihe von Zeilen als Eingabe und geben eine Reihe von Zeilen als Ausgabe zurück.
Bewertungsfunktionen
Mit Bewertungsfunktionen können Sie Berechnungen für einen benutzerdefinierten Satz von Zeilen ausführen. Zu diesen Funktionen gehören Rangfolgen-, Offset-, Aggregat- und Verteilungsfunktionen.
In diesem Beispiel wird die RANG-Funktion verwendet, um eine Rangfolge basierend auf dem Listenpreis zu berechnen, wobei der höchste Preis bei 1 liegt:
SELECT TOP 100 ProductID, Name, ListPrice,
RANK() OVER(ORDER BY ListPrice DESC) AS RankByPrice
FROM Production.Product AS p
ORDER BY RankByPrice;
Die Abfrageergebnisse können wie folgt aussehen:
Produkt-ID
Name
ListPrice
RankByPrice
749
Road-150 Rot, 62
3578.27
1
750
Straße-150 Rot, 44
3578.27
1
751
Road-150 Rot, 48
3578.27
1
771
Berg-100 Silber, 38
3399.99
4
772
Mountain-100 Silber, 42
3399.99
4
775
Berg-100 Schwarz, 38
3374.99
6
...
...
...
...
OVER
Sie können die OVER-Klausel verwenden, um Partitionen oder Gruppierungen innerhalb der Daten zu definieren. Die folgende Abfrage erweitert z. B. das vorherige Beispiel, um preisbasierte Rangfolgen für Produkte in jeder Kategorie zu berechnen.
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;
Die Ergebnisse dieser Abfrage können etwa wie folgt aussehen:
Kategorie
Produkt
ListPrice
RankByPrice
Bib-Shorts
Herren Bib-Shorts, S
89.99
1
Bib-Shorts
Herren Bib-Shorts, M
89.99
1
Bike-Racks
Hitch Rack - 4-Bike
120
1
Fahrradständer
All-Purpose Fahrradständer
159
1
Flaschen und Körbe
Mountain Bottle Cage
9.99
1
Flaschen und Körbe
Fahrradflaschenhalter
8,99
2
Flaschen und Körbe
Wasserflasche - 30 Unzen.
4,99
3
Untere Klammern
HL Bottom Bracket
121.49
1
Untere Klammern
ML Bottom Bracket
101.24
2
Untere Klammern
LL Bottom Bracket
53.99
3
...
...
...
...
Hinweis
Beachten Sie, dass mehrere Zeilen den gleichen Rangwert aufweisen und einige Werte übersprungen werden. Der Grund dafür ist, dass wir nur RANK verwenden. Abhängig von der jeweiligen Anforderung kann es wünschenswert sein, Bindungen mit demselben Rangwert zu vermeiden. Sie können den Rangwert bei Bedarf mit anderen Funktionen, DENSE_RANK, NTILE und ROW_NUMBER steuern. Ausführliche Informationen zu diesen Funktionen finden Sie in der Transact-SQL Referenzdokumentation.
Rowsetfunktionen
Rowset-Funktionen geben eine virtuelle Tabelle zurück, die in der FROM-Klausel als Datenquelle verwendet werden kann. Diese Funktionen nehmen Parameter, die für die Rowset-Funktion selbst spezifisch sind. Dazu gehören OPENDATASOURCE, OPENQUERY, OPENROWSET, OPENXML und OPENJSON.
Mit den Funktionen OPENDATASOURCE, OPENQUERY und OPENROWSET können Sie eine Abfrage an einen Remotedatenbankserver übergeben. Der Remoteserver gibt dann eine Reihe von Ergebniszeilen zurück. Die folgende Abfrage verwendet z. B. OPENROWSET, um die Ergebnisse einer Abfrage aus einer SQL Server-Instanz namens SalesDB abzurufen.
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=SalesDB;Trusted_Connection=yes;',
'SELECT Name, ListPrice
FROM AdventureWorks.Production.Product') AS a;
Um Remoteserver zu verwenden, müssen Sie einige erweiterte Optionen in der SQL Server-Instanz aktivieren, in der Sie die Abfrage ausführen.
Mit den Funktionen OPENXML und OPENJSON können Sie strukturierte Daten im XML- oder JSON-Format abfragen und Werte in ein tabellarisches Rowset extrahieren.
Eine detaillierte Untersuchung der Rowset-Funktionen liegt außerhalb des Umfangs dieses Moduls. Weitere Informationen finden Sie in der Transact-SQL Referenzdokumentation.