Я извлекаю данные из таблицы во временную таблицу, которая имеет разные коды и выглядит следующим образом:
>CODE
>
>"notified",DONE
>
>"info",DONE
>
>DONE
>
>DELAY
>
>"action",DELAY
>
>INFO
>
>DAMAGED
>
>"2_items",DAMAGED
Я манипулирую им, чтобы избавиться от вспомогательной информации:
SUBSTRING(CT.latest_status_code, CHARINDEX(',',CT.latest_status_code) + 1, LEN(CT.latest_status_code)) as 'Code'
и в итоге
>DONE
>
>DONE
>
>DONE
>
>DELAY
>
>DELAY
>
>INFO
>
>DAMAGED
>
>DAMAGED
Теперь я пытаюсь назначить идентификатор для каждого отдельного кода после удаления вспомогательной информации, что-то вроде
>**Code ID**
>
>DONE 1
>
>DONE 1
>
>DONE 1
>
>DELAY 2
>
>DELAY 2
>
>INFO 3
>
>DAMAGED 4
>
>DAMAGED 4
Я создал другую таблицу и пытаюсь добавить идентификаторы с помощью:
DENSE_RANK() OVER (ORDER BY Code) as 'Code_Key'
Однако я получаю 2 разных идентификатора для одного и того же кода, я думаю, что это в основном потому, что я конкатенировал строку ранее. Смотрите ниже:
>**Code ID**
>
>DONE 1
>
>DONE 2
>
>DONE 3
>
>DELAY 4
>
>DELAY 5
>
>INFO 6
>
>DAMAGED 7
>
>DAMAGED 7
Какой лучший способ преодолеть это?
Спасибо
Весь запрос
IF OBJECT_ID ('tempdb..#Code_Keys') IS NOT NULL DROP TABLE #Code_Keys
CREATE TABLE #Code_Keys (
Prod int
,Code varchar(1000)
,updated_date datetime
,code_key int
)
INSERT INTO #Code_Keys(Prod, Code, updated_date, code_key)
SELECT
x.Prod
,x.Code
,x.updated_date
,DENSE_RANK() OVER (ORDER BY Code) as 'Code_Key'
FROM (
SELECT
Prod
,SUBSTRING(CT.latest_status_code, CHARINDEX(',',CT.latest_status_code) + 1, LEN(CT.latest_status_code)) as 'Code'
,updated_date
FROM #tempdb CT
) x