2016-08-15 117 views
2

我試圖寫在SQL Server 2008中的存儲過程,這應該另一列的第一個字母像下面的基礎上生成的ID號:生成編號順序

Auto Generation of ID alphabetically

我我正在使用SQL Server 2008.請感謝任何幫助。問候

回答

1

所以A的都是1XXXXB2XXXX通過Z26XXXX。試試這個:

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

非常感謝,先生,這是我想要的。 – JamshaidRiaz

1

您可以使用rank窗函數產生這些ID:

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

編輯:
我誤解了這個問題。你需要的第一個字母一個單獨的排名和整個名稱:

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

感謝您的答覆,但它是固定的,但是我想生成應相應字母順序的等級一個數字,比如,如果字與「A」的標識應開始啓動1,如果Word以「B」開頭,則ID應以2開頭,依此類推。 – JamshaidRiaz

+0

@JamshaidRiaz我誤解了這個問題。看到我編輯的答案,它應該產生你想要的輸出。 – Mureinik