如何为每个记录添加一个保持增量唯一字母的列 - 在sql中的表中?

时间:2017-01-16 14:07:06

标签: sql sql-server sql-server-2008

我在sql server 2008中有一个像

的表
Id  Name      Volume
1   Jack        20
2   John        20
3   White       40
... (23 more)
27   Jennifer   12
28   Brown      33
29   Brown      55
... (23 more)
53   Alex       67
53   Smith      15
53   Mary       73

我想要的是在这个表中添加一个列,它为每个不同的id保留唯一的字母。示例输出:

Id  Name      Volume   LetterKey
1   Jack        20        A
2   John        20        B
3   White       40        C
... (23 more)          (...Z)
27   Jennifer   12        AA  
28   Brown      33        AB
29   Brown      55        AC
... (23 more)         (...AZ)
53   Alex       67        BA
53   Smith      15        BB
53   Mary       73        BC
...                   (...BZ)

我们不需要3位数的字母,ZZ将是最后一个字母。我找不到将这样的列添加到表中的正确方法。如果有人帮我,我很感激。感谢。

1 个答案:

答案 0 :(得分:4)

只有两个字符的代码,您可以使用row_number()和一些字符算术:

with t as (
      select t.*, row_number() over (order by id) as seqnum
      from t
     )
select ((case when seqnum > 26
              then char(ascii('A') + seqnum / 26 - 1)
              else ''
         end) + 
        char(ascii('A') + seqnum % 26) 
       )
from t