我有一张公司名称的表格。有些公司有不同的地点和不同的法定名称,但应根据相同的集团法进行报告。该守则使用前五个字母组成。
Company GroupCode
DEEZER FRANCE DEEZE
DEEZER SPAIN DEEZE
DEEZER ALGERIA DEEZE
到目前为止一切顺利。现在我正在添加一个不同的公司,它以相同的字母开头,但应该获得一个新的组代码。
如果公司名称不包含已经具有GroupCode的公司名称的一部分,则应分配新的代码。在这种情况下,DEEZER
是确定与GroupCode DEEZE
规则是代码应该使用字母表中的前四个字母+第五个字母。如果此代码也存在,则使用前四个字母+第五个字母,但使用字母表中的一个。所需的结果如下:
Company GroupCode Status
DEEZER FRANCE DEEZE EXISTING
DEEZER SPAIN DEEZE EXISITNG
DEEZER ALGERIA DEEZE EXISTING
DEEZEMBER DEEZF CREATED
DEEZEMAL DEEZG CREATED
所以我需要弄清楚的是下一个“未使用”的字母。如何使用SQL Server 2008 R2实现此目的?
答案 0 :(得分:1)
试试这个:
;with cte as
(select max(groupcode) maxcode
from yourtable
where left(code,4) = left(@companyname,4))
insert into yourtable (company, groupcode, [status])
select @companyname,
case when maxcode is null then left(@companyname,4) + 'a' else left(maxcode,4) + char(ascii(right(maxcode,1))+1) end,
'created'
from cte
假设:您的输入是将公司名称作为某个地方的参数,可能是前端。
我们的想法是使用ascii
函数获取最后一个字母的ASCII码,将其递增1并使用char
函数返回相应的字符。