TSQL:如何在出现重复的列表中生成唯一代码?

TSQL:如何在出现重复的列表中生成唯一代码?,tsql,unique,Tsql,Unique,我有下表: Code Product ==== ======= AA Prod A BB Prod B CC Prod C CC Prod C1 DD Prod D 我想编写一个查询,获取CC代码并将其分别转换为CC1和CC2,然后返回新的数据集 如何在T-SQL中实现这一点?假设您使用的是上面提到的SQL Server 2005 DECLARE @code TABLE (Code VARCHAR(20), Product VARCHAR(100)) INSERT INTO

我有下表:

Code Product
==== =======
AA   Prod A
BB   Prod B
CC   Prod C
CC   Prod C1
DD   Prod D
我想编写一个查询,获取CC代码并将其分别转换为CC1和CC2,然后返回新的数据集


如何在T-SQL中实现这一点?

假设您使用的是上面提到的SQL Server 2005

DECLARE @code TABLE (Code VARCHAR(20), Product VARCHAR(100))
INSERT INTO @code (Code , Product)
VALUES ('AA','Prod A'),('CC','Prod C'),('CC','Prod C1')

;WITH cc AS 
(
    SELECT Code, COUNT(*) AS CodeCount
    FROM @code
    GROUP BY Code
)
SELECT 
    CASE WHEN cc.CodeCount = 1 THEN  c.Code
         ELSE c.Code + CAST(ROW_NUMBER() OVER ( PARTITION BY c.Code ORDER BY c.Product) AS VARCHAR(10))  
    END AS Code,
    c.Product
FROM @code c
INNER JOIN cc 
  ON c.Code = cc.Code
假设你想

CC   Prod C
CC1  Prod C1
CC1  Prod C1
CC2  Prod CX
你可以

;with T as (
    select
        code,
        product,
        dense_rank() over (partition by code order by product) as rank
    from 
        thetable
)
select 
    case rank when 1 then code else code + cast(rank - 1 as varchar(8)) end as code,
    product
from
    T