我正在尝试使用值批量更新表列,但我需要查询以检查此值是否已存在。如果确实如此,则在再次检查并更新表之前进行相关更改。
数据库主要保存员工信息,我需要创建一个唯一的用户名,创建用户名的脚本是:
select upper(LEFT(first_name,1))+LEFT(surname,3)+'1'
from staff_test
如果用于示例用户,则会为用户username
生成ABit1
Andrew Bithell
。我需要做的是检查ABit1
表中是否已有username
STAFF_TEST
,如果是,则将安卓用户名更改为ABit2
,因为用户名必须在移动到下一个用户之前是唯一的。
我创建了另一个表,列出了将现有用户名拆分为2列的所有当前用户名,因此它们在此表中显示为
column1 | column2
------------------
ABit |1
我已经尝试过一个函数,我现在认为Merge语句可能就是这样。
欢迎任何建议。
答案 0 :(得分:0)
使用row_number可以一次生成所有唯一名称:
select
upper(LEFT(first_name,1))+LEFT(surname,3)+
rtrim(row_number() over (partition by upper(LEFT(first_name,1))+LEFT(surname,3) ))
,first_name
,surname
from staff_test
答案 1 :(得分:0)
执行前期检查以查看是否存在任何冲突:
SELECT UPPER(LEFT(first_name, 1)) + LEFT(surname, 3) + '1' AS username ,
COUNT(1) counter
FROM staff_test
GROUP BY UPPER(LEFT(first_name, 1)) + LEFT(surname, 3) + '1'
HAVING COUNT(1) > 1
ORDER BY COUNT(1) DESC
这将返回您员工表上的每个用户名,按用户名分组,以及每个用户的出现次数。
您可以清理数据(如果这是您要查找的内容),否则我建议您为每条记录添加Id
列值或其他一些唯一值,而不是{{ 1}}在最后。