【问题标题】:Generating Number on the base of Alphabetic Order根据字母顺序生成数字
【发布时间】:2016-12-21 09:02:23
【问题描述】:

我正在尝试在 SQL Server 2008 中编写一个存储过程,它应该根据另一列的第一个字母生成 ID 号,如下所示:

我正在使用 SQL Server 2008。如果有任何帮助,我将不胜感激。问候

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 感谢您的回复,但它已修复,但是我想生成一个与字母顺序相对应的数字,例如如果单词以“A”开头,则 ID 应以 1 开头,如果 Word 以“B”开头,则 Id 应以 2 开头,依此类推。
    • @JamshaidRiaz 我当时误解了这个问题。查看我编辑的答案,它应该会产生您想要的输出。
    【解决方案2】:

    所以A 都是1XXXXB2XXXXZ26XXXX。试试这个:

    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
    

    【讨论】:

    • 非常感谢先生,这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2020-09-26
    • 1970-01-01
    • 2023-02-18
    • 1970-01-01
    • 2022-01-07
    • 2023-04-03
    相关资源
    最近更新 更多