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 
相關問題