Как переименовать элементы, присвоив порядковый номер? - PullRequest
0 голосов
/ 20 сентября 2018

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

DECLARE @OperatorPrice TABLE 
(
    ID INT NOT NULL, DealerId INT NULL, DealerName VARCHAR(50) NULL
)

и пример данных:

INSERT INTO @OperatorPrice 
(
    ID, DealerId, DealerName
)
VALUES
  (226, 1,  'WestCarDealer')
, (112, 1,  'WestCarDealer')
, (266, 2, 'AO')
, (112, 2, 'AO')
, (93,  3, 'Best on the West')
, (93,  3, 'Best on the West')

Я хочу переименовать всех дилеров в «Дилер1», «Дилер2», «Дилер3».».Номер должен быть назначен в порядке возрастания: AO должен быть переименован в 'Dealer1', поскольку AO начинается с A, Best on the West должен быть переименован в Dealer2, поскольку он начинается с B, WestCarDealerдолжен быть переименован в Dealer3, потому что он начинается с W.

Таким образом, желаемый результат должен выглядеть следующим образом:

  (226, 1, 'Dealer3')
, (112, 1, 'Dealer3')
, (266, 2, 'Dealer1')
, (112, 2, 'Dealer1')
, (93,  3, 'Dealer2')
, (93,  3, 'Dealer2')

Приблизительное количество уникальных DealerName равно 50дилеры.

Как я могу переименовать автосалоны таким образом?

Я пытался использовать курсоры для этой цели, но не смог сохранить число для увеличения.

1 Ответ

0 голосов
/ 20 сентября 2018

Вы можете использовать CTE для обновления табличной переменной

Пример

;with cte as (
Select *
      ,NewVal = concat('Dealer',dense_rank() over ( order by DealerName))
 From  @OperatorPrice
)
Update cte Set DealerName = NewVal

Обновлено @ OperatorPrice

ID  DealerId    DealerName
226 1           Dealer3
112 1           Dealer3
266 2           Dealer1
112 2           Dealer1
93  3           Dealer2
93  3           Dealer2
...