【发布时间】:2016-12-21 09:02:23
【问题描述】:
我正在尝试在 SQL Server 2008 中编写一个存储过程,它应该根据另一列的第一个字母生成 ID 号,如下所示:
我正在使用 SQL Server 2008。如果有任何帮助,我将不胜感激。问候
【问题讨论】:
标签: sql sql-server sql-server-2008 select
我正在尝试在 SQL Server 2008 中编写一个存储过程,它应该根据另一列的第一个字母生成 ID 号,如下所示:
我正在使用 SQL Server 2008。如果有任何帮助,我将不胜感激。问候
【问题讨论】:
标签: sql sql-server sql-server-2008 select
您可以使用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 都是1XXXX、B 的2XXXX 到Z 的26XXXX。试试这个:
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
【讨论】: