TSQL: Как сделать уникальные коды в списке, где появляются дубликаты? - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть следующая таблица:

Code Product
==== =======
AA   Prod A
BB   Prod B
CC   Prod C
CC   Prod C1
DD   Prod D

Я хотел бы написать запрос, который принимает коды CC и преобразует их в CC1 и CC2 соответственно и возвращает этот новый набор данных.

Как это сделать в T-SQL?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2012

Если вы хотите

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
0 голосов
/ 23 февраля 2012

Предполагается, что вы используете 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
...