Добавить порядковый номер в существующую таблицу для каждого столбца с группировкой по - PullRequest
1 голос
/ 29 апреля 2020

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

ID      Code      value
580     SSSACCT   111
580     SSSACCT   112
580     TIX       10
580     TIX       30
35      SSSACCT   345
35      SSSACCT   344
35      SSSACCT   433
35      SSSACCT   221

И я хочу обновить данные, как показано ниже, заменив 'SSSACCT' на 'SSSA C' и добавив порядковый номер в конец для каждого идентификатора и такой же вещь для кода 'TIX':

ID      Code    Value
580     SSSAC1  111
580     SSSAC2  112
580     TIX1    10
580     TIX2    30
35      SSSAC1  345
35      SSSAC2  344
35      SSSAC3  433
35      SSSAC4  221

До сих пор я пытался использовать T- SQL (переменные), чтобы добавить число в конец (не уверен, что это правильно), но я не уверен как сгруппировать это на основе идентификатора. Буду признателен за любую помощь.

Код, который я написал до сих пор:

DECLARE @myVar int
SET @myVar = 0
UPDATE
  table
SET
  @myvar = ID = @myVar + 1
Group by ID,Code   --I know we cannot use group by in update but we may able to use in sub query

1 Ответ

0 голосов
/ 29 апреля 2020

Вы можете использовать row_number в соответствии с предложением Mitch Wheat, чтобы выяснить значения

вот пример кода, который разбивает его на

Затем вы можете использовать результат для обновления исходной таблицы

;with mycte as (
select 

580 as ID ,   'SSSACCT' as code,   111 as value
union all select
580,     'SSSACCT',   112
union all select
580 ,    'TIX',    10
union all select
580 ,    'TIX' ,      30
union all select
35 ,     'SSSACCT',   345
union all select
35 ,     'SSSACCT',   344
union all select
35 ,     'SSSACCT' ,  433
union all select
35 ,     'SSSACCT',   221
)
, mycte2 as (
Select mycte.* , ROW_NUMBER() over(partition by code, ID order by ID) as row_num
from mycte

)

Select 
mycte2.*
, concat(replace(code,'CT',''),row_num) as new_code
from mycte2
...