得到以下来自给定的信

时间:2014-06-17 09:31:27

标签: sql sql-server

我有一张公司名称的表格。有些公司有不同的地点和不同的法定名称,但应根据相同的集团法进行报告。该守则使用前五个字母组成。

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实现此目的?

1 个答案:

答案 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函数返回相应的字符。

然而,请注意,这绝对不是最好的解决方案。例如,我没有实现边界检查以确保A和Z之间的范围。事实上,我建议你在应用程序代码而不是数据库级别处理它。