web-dev-qa-db-ger.com

MSSQL Select-Anweisung mit inkrementeller Ganzzahlspalte ... nicht aus einer Tabelle

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

34
Rodrigo

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

57
SQLMenace

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.

4

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
2
Misko

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.

0
JohnFx