#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