2016-08-15 3 views

Antwort

1

So A 's sind alle 1XXXX, B' s 2XXXX durch Z ‚s 26XXXX. Versuchen Sie folgendes:

SELECT 
     10000 * (ASCII(LEFT(Field2, 1)) - 64) 
     + ROW_NUMBER() OVER (PARTITION BY LEFT(Field2, 1) ORDER BY Field2) Field1 
     ,Field2 
    FROM 
     (VALUES ('Alpha Company'), ('Airborn Company'), ('Bravo Company'), 
     ('Charlie Company'), ('Cake Company'), ('Camel Company'), 
     ('Delta Company'), ('Zeta Company')) A (Field2); 


Field1    Field2 
-------------------- --------------- 
10001    Airborn Company 
10002    Alpha Company 
20001    Bravo Company 
30001    Cake Company 
30002    Camel Company 
30003    Charlie Company 
40001    Delta Company 
260001    Zeta Company 
+0

Vielen Dank Herr, es ist was ich wollte. – JamshaidRiaz

1

Sie könnten die rank Fensterfunktion verwenden diese IDs zu generieren:

SELECT 10000 + RANK() OVER (ORDER BY field2 ASC) as field1, field2 
FROM my_table 

EDIT:
ich die Frage falsch verstanden. Sie benötigen eine separate Rangliste für den ersten Buchstaben und den ganzen Namen:

SELECT 10000 * 
     RANK() OVER (PARTITION BY LEFT(field2, 1) ORDER BY field2 ASC) + 
     RANK() OVER (ORDER BY field2 ASC) as field1, 
     field2 
FROM my_table 
+1

Vielen Dank für Ihre Antwort, aber es ist festgelegt, aber ich eine Zahl generiert werden soll, die in den Rang eines Alphabet entspricht, um sein sollte, wie wenn das Wort beginnt mit „A“ die Id sollte beginnen mit 1, wenn Word mit "B" beginnt, sollte Id mit 2 beginnen, und so weiter. – JamshaidRiaz

+0

@JamshaidRiaz Ich habe die Frage dann missverstanden. Sehen Sie meine bearbeitete Antwort, es sollte die gewünschte Ausgabe erzeugen. – Mureinik

Verwandte Themen