Изменение повторяющегося имени пользователя с помощью функции Count() Функция, SQL 2012

#sql #duplicates #logic

#sql #дубликаты #Логические

Вопрос:

Мне предоставлен список пользователей, и мне нужно создать имена пользователей для указанных пользователей, но они должны следовать определенному бизнес-правилу. Имя пользователя = первые 3 буквы имени первые 3 фамилии, и если имя пользователя существует, добавьте числовое значение, например, 1 после.

Пример. Если есть 3 Chirs Henz, то имена пользователей должны быть ChiHen, ChiHen1, ChiHen2.

    IF(NOT EXISTS(SELECT UserName FROM SystemUser WHERE SystemUser.UserName = UserName))
    UPDATE U
    SET UserName = UserName   CAST((SELECT COUNT(1) FROM SystemUser  WHERE UserName LIKE UserName '%') AS NVARCHAR),    
  

@UserUpload — это определяемая пользователем таблица для хранения данных. И я использую Count(), чтобы подсчитать, сколько чихен мне нужно добавить правильное число в конце. Это мои результаты, когда я запускаю это.
CHIHEN , CHIHEN, CHIHEN3

Ответ №1:

Другой вариант — использовать специальную таблицу подсчета

 Declare @Users table (ID int,UserName varchar(25),FullName varchar(50))
Insert into @Users values
(1,'TESUSE','Test User'),
(2,'TESUSE1','Test User'),
(3,'TESUSE3','Test User')    --<<< Notice that Test User 2 is missing

Declare @NewFirst varchar(50)='Test'
Declare @NewLast varchar(50)='User'

Select Top 1 *
 From (
         Select RowNr,NewUserName=Upper(Concat(Left(@NewFirst,3),Left(@NewLast,3), IIF(RowNr-1=0,NULL,RowNr-1)))
         From (
                Select RowNr=Row_Number() over (Order By (Select NULL))
                 From (Select N From (Values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) N(N)) N1, 
                      (Select N From (Values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) N(N)) N2
              ) N
      ) A
  Where NewUserName Not in (Select UserName From @Users)
  Order By RowNr 
  

ВОЗВРАТ

 RowNr   NewUserName
3       TESUSE2