Verwenden von Rangfolge- und Rowsetfunktionen

Abgeschlossen

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.