In Oracle haben wir "rownum". Was kann ich in SQL Server tun?Wie RowNum-Spalte in SQL Server erstellen?
Antwort
In SQL Server 2005 (und 2008) können Sie die ROW_NUMBER function in Verbindung mit der OVER-Klausel verwenden, um die Reihenfolge zu bestimmen, in der die Zeilen gezählt werden sollen.
aktualisieren
Hmm. Ich weiß eigentlich nicht, was die Oracle-Version macht. Wenn es Ihnen eine eindeutige Nummer pro Zeile (über die gesamte Tabelle) gibt, bin ich mir nicht sicher, ob es eine Möglichkeit gibt, dies in SQL Server zu tun. SQL Server ROW_NUMBER() funktioniert nur für die Zeilen, die in der aktuellen Abfrage zurückgegeben werden.
Wenn Sie eine ID-Spalte haben, können Sie dies tun:
select a.*,
(select count(*) from mytable b where b.id <= a.id) as rownum
from mytable a
order by id;
Natürlich funktioniert dies nur, wenn Sie in der Lage sind rownums in der gleichen (oder umgekehrt), um so die Reihenfolge der bestellen IDs.
Wenn Sie eine echte Teilmenge von Zeilen auswählen, natürlich müssen Sie das gleiche Prädikat für die gesamte Auswahl und auf die Unterabfrage gelten:
select a.*,
(select count(*) from table b where b.id <= a.id and b.foo = 'X') as rownum
from table a where a.foo = 'X'
order by id;
Offensichtlich ist dies nicht besonders effizient ist.
Basierend auf meinem Verständnis, müssten Sie ranking functions und/oder die TOP clause verwenden. Die SQL Server-Funktionen sind spezifisch, die Oracle-Version kombiniert die beiden Konzepte.
Die Ranking-Funktion ist einfach: Hier ist, warum Sie TOP verwenden würden. Hinweis: Sie können nicht WHERE auf ROWNUMBER direkt ...
'Orable:
select
column_1, column_2
from
table_1, table_2
where
field_3 = 'some value'
and rownum < 5
--MSSQL:
select top 4
column_1, column_2
from
table_1, table_2
where
field_3 = 'some value'
- 1. Wie in SQL Server
- 2. SQL Server Datenbankscript erstellen/aktualisieren
- 3. Erstellen neuer Fremdschlüssel (SQL Server)
- 4. Erstellen von Skalarfunktionen in SQL Server
- 5. bedingt Benutzer in SQL Server erstellen
- 6. SQL Server-Tabelle programmgesteuert erstellen
- 7. Erstellen von Funktionen in SQL Server?
- 8. Erstellen Sie Trigger in SQL Server-Tabelle
- 9. Erstellen von Protokolldateien in SQL Server 2012
- 10. SQL Server-Datenbank von vb.net erstellen, ohne SQL Server
- 11. SQL Server 2012: Tabelle erstellen
- 12. Erstellen LOG für Tabellen in SQL Server
- 13. Tabelle erstellen schlägt in Schleife (SQL Server)
- 14. Erstellen von Testdaten in SQL Server
- 15. Wie erstellen Sie SQL Server 2005-Vorlagen für gespeicherte Prozeduren in SQL Server 2005 Management Studio?
- 16. Wie eine benutzerdefinierte alphanumerischen Primärschlüssel in SQL Server 2005 erstellen
- 17. Wie JSON aus einer EAV-Tabelle in SQL Server erstellen
- 18. Erstellen Sie einen Ordner in SQL Server 2008 wie "Systemdatenbanken"
- 19. SQL Server, wie zwei in einer select-Anweisung Tabelle erstellen
- 20. Wie Sie Fremdschlüsseleinschränkung in Microsoft SQL Server 2012 erstellen?
- 21. Kann ich erstellen eine globale Funktion in SQL Server erstellen?
- 22. ERSTELLEN VON INDEX SQL Server 2008
- 23. Erstellen von Ereignissen von SQL Server
- 24. Dynamische SQL in SQL Server - wie?
- 25. Erstellen einer SQL Server-Datenbank aus Python
- 26. SQL Server CE-Datenbankdatei programmgesteuert erstellen
- 27. Raiseerror in SQL Server
- 28. SQL Server gespeicherte Prozedur, Erstellen von Funktion
- 29. SQL Server: EINFÜGEN, AKTUALISIEREN, LÖSCHEN, ERSTELLEN Timeouts
- 30. SQL Server Tabelle mit Fremdschlüssel erstellen
sehr ineffizient für SQL Server 2005 und höher – gbn
Ja, wie ich bemerkt, oben. Aber wenn Sie es tun müssen, und Sie nicht 2005 oder höher haben, tun Sie, was Sie müssen. – tpdi