Ich habe eine kurze TSQL-Anweisung gesehen , die eine Zeichenfolge effektiv in ihre konstituierenden Zeichen aufteilt , eines pro Zeile, um den asciiWert für jedes Zeichen zu bewerten .
Wenn ich die Abfrage richtig und effektiv lese, werden 3 CTEs verwendet, um eine Tabelle mit 1 Spalte mit 10.000 Zeilen mit dem Wert '0' zu erstellen.
Ein vierter CTE ist wie folgt definiert:
cteTally(n) AS(
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) n
FROM E4
)
Anschließend wird dieser CTE mit einer Tabelle verbunden, die eine Spalte mit den interessierenden Zeichenfolgen enthält, mit den folgenden Angaben select:
SELECT n, SUBSTRING(LastName, n, 1), ASCII( SUBSTRING(LastName, n, 1))
Das heißt, Zeilennummer n, dann das n-te Zeichen in Nachname, dann der ASCII-Wert dieses Zeichens.
Meine Fragen beziehen sich auf die overKlausel im obigen CTE.
Was genau macht es im Wesentlichen?
Wenn wir row_number aus 10.000 identischen Zeilen abfragen, warum brauchen wir überhaupt eine order byKlausel? Warum wird das order byin eine overKlausel gesetzt und nicht als order byKlausel für die selectAnweisung - zumal die overKlausel nicht einmal eine Partition angibt? (Ich nehme an, dies bedeutet, dass das Fenster, über das row_numberoperiert wird, die vollen 10.000 Zeilen umfasst?) Und was bedeutet es, nach zu bestellen select null?

overKlausel sayorder bysind optional - aber ich denke, dies bedeutet, dass Partitionen möglicherweise ohne Fensterfunktionen verwendet werden (und keine benötigenorder by). Netter Benutzername!