0

我需要你的大力帮助我正在使用sql server 2008,我想用sql查询得到输出。添加A,B,C字母重复值

我在表中有以下数据。

Id  Code 
----------------- 
1  01012 
2  01012 
3  01012 
4  01012 
5  01013 
6  01013 
7  01014 

我需要下面的输出

Id  Code 
----------------- 
1  01012 
2  01012A 
3  01012B 
4  01012C 
5  01013 
6  01013A 
7  01014 

回答

3

的SQL Server 2012+解决方案

可以adpated至2008年与+CHOOSECASE更换CONCAT

数据:

CREATE TABLE #tab(ID INT, Code VARCHAR(100)); 

INSERT INTO #tab 
SELECT 1, '01012' 
UNION ALL SELECT 2, '01012' 
UNION ALL SELECT 3, '01012' 
UNION ALL SELECT 4, '01012' 
UNION ALL SELECT 5, '01013' 
UNION ALL SELECT 6, '01013' 
UNION ALL SELECT 7, '01014'; 

查询:

WITH cte AS 
(
    SELECT ID, Code, 
    [rn] = ROW_NUMBER() OVER(PARTITION BY Code ORDER BY id) 
    FROM #tab 
) 
SELECT 
    ID, 
    Code = CONCAT(Code, CHOOSE(rn, '', 'A', 'B', 'C', 'D', 'E', 'F')) -- next letters 
FROM cte; 

LiveDemo

+0

非常感谢你much.It是一个很大的帮助 – Sambasiva

+1

这是限制复制,直到楼菲利克斯查询是更好的选择。 –

4

您可以使用ROW_NUMBER。当Rn = 1时,保留原来的Code else,加上A,B等等。

要确定要添加哪个字母,公式为CHAR(65 - RN - 2)

WITH CTE AS(
    SELECT *, 
     Rn = ROW_NUMBER() OVER(PARTITION BY Code ORDER BY Id) 
    FROM tbl 
) 
SELECT 
    Id, 
    Code = CASE 
       WHEN Rn = 1 THEN Code 
       ELSE Code + CHAR(65 + Rn - 2) 
      END 
FROM CTE 
+0

非常感谢。 – Sambasiva

0
select 
    case 
     when rownum > 1 then code + char(65+rownum-2) 
     else code 
    end as code, 
    id 
from (
    select *, 
     ROW_NUMBER() over(partition by code order by code) as rownum 
    from #tab 
)c 
相关问题