Ich benötige nach Möglichkeit eine t-sql-Abfrage, die unter Rückgabe der Werte aus einer beliebigen Tabelle auch eine inkrementelle Ganzzahlspalte mit dem Wert 1 für die erste Zeile, 2 für die zweite usw. zurückgibt.
Diese Spalte befindet sich eigentlich in keiner Tabelle und muss streng inkrementell sein, da die ORDER BY-Klausel die Zeilen der Tabelle sortieren könnte und ich die inkrementelle Zeile immer in perfekter Form haben möchte ...
Danke im Voraus.
--EDIT Sorry, vergessen zu erwähnen, muss auf SQL Server 2000 ausgeführt werden
Für SQL 2005 und höher
SELECT ROW_NUMBER() OVER( ORDER BY SomeColumn ) AS 'rownumber',*
FROM YourTable
für 2000 müssen Sie so etwas tun
SELECT IDENTITY(INT, 1,1) AS Rank ,VALUE
INTO #Ranks FROM YourTable WHERE 1=0
INSERT INTO #Ranks
SELECT SomeColumn FROM YourTable
ORDER BY SomeColumn
SELECT * FROM #Ranks
Order By Ranks
siehe auch hier Zeilennummer
Sie können mit einer benutzerdefinierten Nummer beginnen und von dort aus inkrementieren. Beispielsweise möchten Sie für jede Zahlung, die Sie ausführen können, eine Schecknummer hinzufügen:
select @StartChequeNumber = 3446;
SELECT
((ROW_NUMBER() OVER(ORDER BY AnyColumn)) + @StartChequeNumber ) AS 'ChequeNumber'
,* FROM YourTable
wird die richtige Schecknummer für jede Zeile geben.
ROW_NUMBER () ausprobieren
http://msdn.Microsoft.com/en-us/library/ms186734.aspx
Beispiel:
SELECT
col1,
col2,
ROW_NUMBER() OVER (ORDER BY col1) AS rownum
FROM tbl
Es ist hässlich und führt zu einer schlechten Leistung, aber technisch funktioniert dies auf jeder Tabelle mit mindestens einem eindeutigen Feld UND funktioniert in SQL 2000.
SELECT (SELECT COUNT(*) FROM myTable T1 WHERE T1.UniqueField<=T2.UniqueField) as RowNum, T2.OtherField
FROM myTable T2
ORDER By T2.UniqueField
Hinweis: Wenn Sie diesen Ansatz verwenden und der äußeren SELECT-Anweisung eine WHERE-Klausel hinzufügen, müssen Sie sie der inneren SELECT-Anweisung hinzufügen, auch wenn die Zahlen stetig sein sollen.