2014-04-25 15 views
1

我使用字段姓氏的前三個字符生成字母數字標識,然後使用遞增3位數字。我正在使用MSSQL 2012的查詢是:Alpha數字標識的格式

SELECT LastName, FirstName, 
     UPPER(LEFT(LastName, 3)) + LEFT('000', LEN(ROW_NUMBER() 
        OVER (PARTITION BY LEFT(LastName, 3)ORDER BY LEFT(LastName, 3)))+1) 
     + CAST(ROW_NUMBER() OVER (PARTITION BY 
       LEFT(LastName, 3)ORDER BY LEFT(LastName, 3)) AS NVARCHAR(1000)) AS ID 
FROM @Table 

的查詢工作相對較好但一旦數字增量兩個,而不是它在結束010是00010同樣的情況是真實的,一旦數字部分遞增到三數字。例如,我想輸出一樣如下:

╔══════════╦═══════════╦══════════╗ 
║ LastName ║ FirstName ║ ID ║ 
╠══════════╬═══════════╬══════════╣ 
║ Jones ║ David  ║ JON001 ║ 
║ Jones ║ David  ║ JON002 ║ 
║ Jones ║ David  ║ JON003 ║ 
║ Jones ║ David  ║ JON004 ║ 
║ Smith ║ John  ║ SMI001 ║ 
║ Smith ║ John  ║ SMI002 ║ 
║ Smith ║ Robert ║ SMI003 ║ 
║ Smith ║ John  ║ SMI004 ║ 
║ Smith ║ John  ║ SMI005 ║ 
║ Smith ║ Robert ║ SMI006 ║ 
║ Smith ║ John  ║ SMI007 ║ 
║ Smith ║ John  ║ SMI008 ║ 
║ Smith ║ Robert ║ SMI009 ║ 
║ Smith ║ John  ║ SMI010 ║ 
║ Smith ║ John  ║ SMI011 ║ 
║ Smith ║ Robert ║ SMI012 ║ 
║ ..  ║ ..  ║ ..  ║ 
║ Smith ║ James  ║ SMI100 ║ 
╚══════════╩═══════════╩══════════╝ 

我不知道如何解決的遞增數字字段。感謝您的任何幫助,您可以提供。

回答

1

從右而不是左?

SELECT *, UPPER(LEFT(LastName, 3)) + RIGHT('000' + CAST(ID AS VARCHAR(3)), 3) 
FROM (
    SELECT 
     LastName, 
     FirstName, 
     ROW_NUMBER() OVER (PARTITION BY LEFT(LastName, 3) ORDER BY LastName) AS ID 
    FROM @table 
) T