2017-06-27 1 views
0

Ich habe eine TabelleSchrittzahl über verschiedene Werte erzeugt

Apple 
Apple 
Grape 
Grape 
Grape 
Orange 
Orange 
Orange 

ich für einen Ausgang suchen wie

1 Apple 
2 Grape 
3 Orange 

So sollte es die Werte deutlich und eine automatische fortlaufende Nummer bekommen.

Mein Aufwand ist bisher so.

SELECT 
(row_number() over (order by 'Fruit')) AS 'Id' , 
'Fruit' 
FROM 
(
SELECT 'Fruit' 
FROM myTable GROUP BY 'Fruit' 
) t 

Was ist der beste Weg, dies über einen großen Datensatz zu tun.

+0

http://rextester.com/MTT67071 –

Antwort

2

Ich glaube, Sie suchen dense_rank():

select dense_rank() over (order by Fruit) as id, Fruit 
from mytable; 

, dass die ursprünglichen Zeilen zurückgibt.

Wenn Sie nur per fruit eine Zeile wollen, dann die Zeilen auswählen und row_number() dann verwenden:

select fruit, row_number() over (order by fruit) 
from (select distinct fruit from mytable) t; 

nicht einfache Anführungszeichen für Spaltenaliasnamen anwenden.

+0

Danke, Ja, ich brauche nur auf Zeile pro Frucht. Ist deutlich schneller als die Gruppe nach. –

+0

@TronaldDump. . . Sie sollten in Bezug auf die Leistung ziemlich ähnlich sein. 'select distinct' ist einfacher zu schreiben. –