2011-01-06 6 views
7

Ich mag würde eine SELECT-Abfrage-Anweisung mit Autowert schaffen .. wie ..Autowert in select-Anweisung in SQL Server

select * from tbl1 

gibt mir alles aus der Tabelle.

Das Ergebnis Ich mag würde zu bekommen, ist ..

1   data 
2   data 
3   data 

So wie kann ich diese Nummer bekommen tun .. ??

wie ..

select (for autonumber), * from tbl1 

die Daten in meiner Tabelle wiederholt werden (keine eindeutigen Daten)

Antwort

19

Verwendung ROW_NUMBER:

SELECT ROW_NUMBER() OVER (ORDER BY col1) AS rn, * FROM tbl1 

die Ergebnisse zu filtern, basierend auf der Zeilennummer verwenden dies:

SELECT * FROM 
(
    SELECT ROW_NUMBER() OVER (ORDER BY col1) AS rn, * FROM tbl1 
) T1 
WHERE rn = 5 
+0

ja .. das ist die richtige Antwort. Ich möchte etw tun .. SELECT ROW_NUMBER() OVER (ORDER BY col1) AS rn, * VON tbl1 wo rn = 5; Anscheinend funktioniert es nicht so ... irgendeine Lösung dafür? – william

+1

@william: Sie müssen die Zeilennummer in einer abgeleiteten Tabelle generieren und in einer äußeren Auswahl filtern. Ich werde meine Antwort aktualisieren, um dies zu demonstrieren. –

+0

Ich kann dumm aussehen, diese Frage zu stellen. Aber was ist T1? Und ich kann "Reihenfolge" nicht in innere Auswahlanweisung setzen, ist das normal? – william

0

Möglicherweise müssen Sie den Offset der Identität finden, z. letzte ID der zweiten Tabelle:

DECLARE @lastAutoID int 
SET @lastAutoID = abs((Select max(convert(float,[ConsID])) 
FROM [RXPIPEDB]...[consumption])) 

Dann nutzen ROW_NUMBER():